Вопрос по websocket, node.js, performance, ajax – Зачем использовать AJAX, когда доступны WebSockets?

175

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

This leads me to the question:

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceededen.wikipedia.org/wiki/… Dante
Error: User Rate Limit Exceededblog.arungupta.me/rest-vs-websocket-comparison-benchmarks Rune Jeppesen

Ваш Ответ

7   ответов
1

t think we can do a a clear comparison of Websockets and HTTP as they're no rivals nor solve the same problems.

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

вопрос был об AJAX вообще, а не REST в частности. Это правда, что AJAX может использоваться для REST, но он также используется для опроса и длинного опроса. Хотя я согласен с вашим выводом (как вы можете сказать из моего ответа), я думаю, что ваш ответ может отражать это различие (обратите внимание, что Websockets можно использовать и для REST, хотя и не с помощью методов HTTP).
@ Возможно, я согласен с тобой.
16

Например, в настоящее время Vodafone Italy блокирует WS на порту 80, но разрешает WSS на порту 443. Вы можете довольно легко протестировать любого носителя через нашу домашнюю страницу, к которой вы можете получить доступ как по HTTP, так и по HTTPS. Он пытается WebSockets и возвращается к HTTP, если они заблокированы. Используйте этот URL для отображения в середине виджета, который сообщает о текущем транспорте:lightstreamer.com/?s
Любопытно: какие носители блокируют WebSocket на порту 80? Какой блок защищен WebSocket (WSS) на порте 443? Последнее подразумевает принудительные, прозрачные веб-прокси MITM ... никогда не видел этого в общедоступных сетях (только в корпоративных), поскольку требует установки новых сертификатов CA в браузерах.
К счастью, большинство фреймворков WebSocket поддерживают упомянутые запасные варианты, включая использование Flash для сокетов. Socketn.IO и SignalR являются приличными платформами ... хотя вы действительно ограничены, как вы упомянули, из-за прокси-серверов и балансировщиков нагрузки. К счастью, и Node.JS, и следующий IIS отлично справляются с этой ролью.
199

Update

Правда, Opera Mini не поддерживает его, но еще более неприятно отсутствие поддержки браузера Android, что делает его немного более сложным для использования с приложениями на основе веб-браузера (Cordova PhoneGap)
И вот на заре 2014 года WebSockets практически является стандартом (RFC 6455) и только Opera mini его не поддерживает.
@ kanaka, отправка файлов через WebSocket быстрее или медленнее по сравнению с HTTP (ajax, comet)?
Извините, но для меня это не ответ на вопрос. В основном это просто говорит о том, что они не предназначены для замены друг друга и что WS не полностью поддерживается (сейчас). Это не ответит, почему вы бы предпочли AJAX веб-сокету? Давайте возьмем Discord, например. Discord использует WS для передачи сообщений и событий с сервера клиентам, а также использует HTTP-запросы от клиента к серверу (отправка сообщений, запрос данных и т. Д.). Я пришел к этому вопросу, чтобы получить ответ, почему вы это сделаете. Есть ли какая-то техническая причина, по которой вы бы поставили AJAX выше открытого соединения WS?
@Pacerier полный ответ будет долгим, но он в основном сводится к тому, что вы пытаетесь повторно реализовать вещи, которые браузер уже делает хорошо (кеширование, безопасность, параллелизм, обработка ошибок и т. Д.). Что касается производительности, хотя скорость передачи больших файлов с нуля была бы одинаковой, у браузеров были годы на тонкую настройку кэширования веб-содержимого (большая часть которого относится к запросам AJAX), поэтому на практике переход с AJAX на WebSockets вряд ли обеспечит выгода для существующего функционала. Но для двунаправленной связи с малой задержкой это огромная победа.
46

AJAX for polling?

For many developers, AJAX is easier to code, especially when it comes to coding and designing the backend.

With HTTP/2, the highest cost related to AJAX (the establishment of a new connection) was eliminated, allowing AJAX calls to be quite performant, especially for posting and uploading data.

AJAX for REST?

The AJAX API was practically designed for REST API calls and it's a great fit.

REST calls and uploads using AJAX are significantly easier to code, both on the client and the backend.

As data payload increases, Websocket connections might get blocked unless message fragmentation / multiplexing logic is coded.

If an upload is performed in a single Websocket send call, it could block a Websocket stream until the upload had finished. This will reduce performance, especially on slower clients.

What about HTTP/2 push?

And Security?

My Humble Opinion

@ Мист, спасибо за это замечательное объяснение. Что бы вы предпочли для живых уведомлений, таких как fb / stackoverflow? Я разрабатываю веб-сервисы RestFull для своего веб-приложения, но очень смущен тем, что я должен использовать для функции уведомлений? AJAX или WebSockets?
Извинения, я отсутствовал, когда истек срок действия награды. Плохое планирование с моей стороны. Я назначил еще одну награду, которую я назначу вам по истечении 23 часов.
Небольшая грамматическая ошибка & # x2018; если что, я что-то ... & # x2019; считать
@ spottedmahn - Спасибо! Я полагаю, что так и происходит, я использую свой редактор кода для черчения текста
Уведомления @puspen (IMHO) отлично подходят для Websockets. При разработке логики переподключения и автономных очередей уведомлений необходимо принять множество решений, но фактическое уведомление легко кодировать и выполнять с помощью веб-сокетов.
0

9

@ Dan D - иногда вы не хотите, чтобы вся эта ерунда пересекала всю строку, например куки и заголовки ...
@Dan Что, если, например, файлы изображений отправляются как base64, CSS как текст, JavaScript также как текст, а затем добавляются в документ? Это было бы правдоподобно? Jack
@DanD. HTTP и WebSocket - это два разных протокола. Конечно, мы не можем запрашивать ресурсы HTTP, используя протокол WebSocket, по той же причине, по которой мы не можем запрашивать ресурсы WebSocket, используя протокол HTTP!That doesn't mean that the client cannot request html and/or image files sent via the Websocket protocol.
Лучшая причина в том, что AJAX-запрос - это обычный HTTP-запрос, который означает, что он может извлекать HTTP-ресурсы; WebSockets не могут этого сделать.
@DanD. +1, я согласен, думаю, я больше подходил к вопросу из контекста быстрой потоковой передачи данных, как в примере вопроса, но это определенно правильно.
15

Похожие вопросы