Краткий ответ
Поддержание активного веб-сокета требует затрат как для клиента, так и для сервера, независимо от того, будет ли Ajax стоить только один раз, в зависимости от того, что вы с ним делаете.
Длинный ответ
Веб-сокеты часто неправильно понимают из-за всего этого «Эй, используйте Ajax, это подойдет!». Нет, веб-сокеты не заменяют Ajax. Они потенциально могут применяться к одним и тем же полям, но бывают случаи, когда использование Websocket абсурдно.
Возьмем простой пример: динамическая страница, которая загружает данные после загрузки страницы на стороне клиента. Это просто, сделайте вызов Ajax. Нам нужно только одно направление, от сервера к клиенту. Клиент запросит эти данные, сервер отправит их клиенту, готово. Зачем вам реализовывать веб-сокеты для такой задачи? Вам не нужно, чтобы ваше соединение было постоянно открыто, вам не нужно, чтобы клиент постоянно запрашивал сервер, вам не нужно, чтобы сервер уведомлял клиента. Соединение останется открытым, оно будет тратить ресурсы, потому что, чтобы соединение оставалось открытым, вам нужно постоянно его проверять.
Теперь с приложением чата все по-другому. Вам нужно, чтобы ваш клиент получал уведомление от сервера, вместо того, чтобы заставлять его запрашивать сервер каждые x секунд или миллисекунды, если что-то ново. В этом нет смысла.
Чтобы лучше понять, рассмотрите это как два человека. Один из двух - это сервер, второй - клиент. Ajax похож на отправку письма. Клиент отправляет письмо, сервер отвечает другим письмом. Дело в том, что для приложения чата разговор будет таким:
«Привет, Сервер, есть что-то для меня?
- Нет.
- Привет, Сервер, есть что-то для меня?
- Нет.
- Эй, сервер, есть что-то для меня?
- Да, вот оно. »
Сервер не может отправить письмо клиенту, если клиент никогда не запрашивал ответа. Это огромная трата ресурсов. Потому что для каждого запроса Ajax, даже если он кэширован, вам необходимо выполнить операцию на стороне сервера.
Теперь случай, который я обсуждал ранее, с данными, загруженными с помощью Ajax. Представьте, что клиент разговаривает по телефону с сервером. За поддержание активного соединения приходится платить. Это стоит электричество, и вы должны платить своему оператору. Теперь зачем вам звонить кому-то и держать его на телефоне в течение часа, если вы просто хотите, чтобы этот человек сказал вам 3 слова? Отправь проклятое письмо.
В заключение, Websocket не является полной заменой Ajax!
Иногда вам понадобится Ajax там, где использование Websocket абсурдно.
Изменить: случай SSE
Эта технология не очень широко используется, но может быть полезна. Как следует из названия, отправленные сервером события - это односторонняя передача от сервера к клиенту. Клиент ничего не запрашивает, сервер просто отправляет данные.
Вкратце:
- Однонаправленный от клиента: Ajax
- Однонаправленный от сервера: SSE
- Двунаправленный: Websockets
person
Depado
schedule
23.07.2014