Короткий ответ
Ведение WebSocket активного имеет стоимость, как для клиента и сервера, будет ли Ajax имеют стоимость только один раз, в зависимости от того, что вы делаете с ним.
Длинный ответ
WebSockets часто неправильно из-за всей этой «Эй, использовать Ajax, который будет делать!». Нет, веб-узлы не являются заменой Ajax. Они потенциально могут применяться к тем же полям, но бывают случаи, когда использование Websocket абсурдно.
Давайте рассмотрим простой пример: динамическая страница, которая загружает данные после загрузки страницы на стороне клиента. Это просто, сделайте вызов Ajax. Нам нужно только одно направление, от сервера к клиенту. Клиент запросит эти данные, сервер отправит их клиенту. Зачем вам внедрять websockets для такой задачи? Вам не нужно, чтобы ваше соединение было открыто все время, вам не нужно, чтобы клиент постоянно запрашивал сервер, вам не нужен сервер для уведомления клиента. Соединение будет оставаться открытым, оно будет тратить ресурсы, потому что для поддержания открытого соединения вам необходимо постоянно его проверять.
Теперь для приложения чата все совершенно по-другому. Вам необходимо, чтобы ваш клиент был уведомлен сервером, а не заставлял клиента запрашивать сервер каждые х секунд или миллисекунды, если что-то новое. Это не имело бы смысла.
Чтобы понять лучше, см. Это как два человека. Один из двух серверов - это сервер. Аякс похож на отправку письма. Клиент отправляет письмо, сервер отвечает другой буквой. Дело в том, что для приложения чата разговор будет так:
«Эй-сервер, есть кое-что для меня
- No.
- Эй-сервер, есть кое-что для меня
- №
? - Привет, сервер, получил что-то для меня?
- Да, вот оно.
Сервер не может фактически отправить письмо клиенту, если клиент никогда не просил ответа. Это огромная трата ресурсов. Поскольку для каждого запроса Ajax, даже если он кэширован, вам необходимо выполнить операцию на стороне сервера.
Теперь случай, который я обсуждал ранее, с данными, загруженными Ajax. Представьте, что клиент находится на телефоне с сервером. Удержание активного соединения связано с затратами. Это стоит электричества, и вы должны оплатить свой оператор. Теперь зачем вам звонить кому-то и держать его на телефоне в течение часа, если вы просто хотите, чтобы этот человек сказал вам 3 слова? Отправить проклятое письмо.
В заключение Websockets не являются полной заменой для Ajax!
Иногда вы будете need Ajax, где использование Websocket абсурдно.
Edit: Дело SSE
Эта технология не используется очень широко, но это может быть полезно. Как указано в его названии, Server-Sent Events являются односторонним нажатием от сервера к клиенту. Клиент ничего не запрашивает, сервер просто отправляет данные.
Короче:
- Однонаправленный от клиента: Ajax
- Однонаправленный с сервера: SSE
- Двунаправленный: WebSockets
Я считаю, что это правильно. В приложениях, где вам не нужна двунаправленная связь, запросы ajax будут намного проще на сервере. Кроме того, учтите, что когда постоянное сохранение HTML5 становится доступным (в основном в то же время, когда веб-сайты становятся все более доступными), веб-приложения будут только синхронизироваться с сервером по мере необходимости. – badunk