С веб-сокетами есть ли место для AJAX? - PullRequest
8 голосов
/ 12 января 2011

Я сейчас создаю приложение в реальном времени, используя Node. Я использую socket.io для поддержки моих взаимодействий в реальном времени, но у меня загружен jQuery, поэтому у меня есть AJAX. Первоначально я использовал socket.io для всех моих коммуникаций между сервером и клиентом.

Я начинаю думать, что AJAX может лучше подходить для определенных случаев, таких как асинхронное выполнение транзакций RESTful, потому что мне не нужно писать отдельный случай сообщения в моем сокете для обработки каждой новой транзакции, а также писать RESTful маршрутизации.

Мне интересно, что я делаю для чего-то или лучше использовать сокеты для производительности или что-то еще, о чем я не думаю.

Спасибо! Мэтт Мюллер

Ответы [ 2 ]

10 голосов
/ 20 декабря 2011

Да, WebSockets ( RFC 6455 ) и Ajax совершенно разные и служат разным целям.

Как вы говорите, с Ajax вы можете выполнять запросы RESTful.Это означает, что вы можете воспользоваться существующей HTTP-инфраструктурой, такой как, например, прокси для кеша запросов и использовать условных запросов на получение .Ajax-запрос может быть довольно тяжелым, поскольку каждый Ajax-запрос содержит заголовки HTTP и файлы cookie.

WebSockets предназначен для двунаправленной связи с малыми задержками.По своей конструкции WebSockets имеет очень мало накладных расходов в каждом сообщении.Например, сообщения WebSockets не должны содержать заголовки HTTP и могут в будущем использоваться для VoIP и потоковой передачи в обоих направлениях.

Другое отличие состоит в том, что Ajax можно использовать с серверами без состояния ,Например, если ваша веб-нагрузка сбалансирована несколькими серверами, любой сервер может обрабатывать Ajax-запрос даже после перезагрузки (или обновления).Вебсокеты «подключены» и используют сервер с сохранением состояния , поэтому с ним может быть сложнее использовать несколько серверов.

В этом случае также есть события, отправленные сервером, которые аналогичны WebSockets.сервер может передавать данные клиенту (что невозможно сделать с помощью Ajax без хаков (например, кометы)), а также может обрабатывать автоматические переподключения.Но это только для сообщений в одном направлении (сервер-клиент).См. Событие на стороне сервера HTML5: EventSource и упакованный WebSocket .

0 голосов
/ 12 января 2011

Это две совершенно разные технологии, которые можно использовать вместе: с AJAX запрос инициируется клиентом, а с WebSockets запрос инициируется сервером для передачи некоторых данных клиенту.

...