LINUX.ORG.RU

WebSockets

 , , ,


0

1

Вот сейчас в моде всякие React и т.д.
На сервере поднят req/res сервер, а в браузере идут запросы и читается JSON и т.д.
А что такое WebSockets? Можно ли этим WebSockets полностью заменить AJAX?

что-то у тебя все в кучу. WebSockets это протокол.

ossa ★★ ()
Ответ на: комментарий от Legioner

Просто как мне кажется, запускать в браузере слушающий сервер - оверхед
Пускай node отдает html-ки, а в браузере уже с помощью клиентского js и websockets уже будет взаимодействие

mystery ★★ ()

... раньше, вместо AJAX применялись фреймы, потом для тех кто ни осилил айджакс - придумали флэш ...

anonymous ()
Ответ на: комментарий от Hertz

Веб-сервер, говорящий с веб-сервером - глупо
WebSockets - умно
Сижу, ковыряю, надеюсь, смогу осилить

mystery ★★ ()
Ответ на: комментарий от mystery

Просто как мне кажется, запускать в браузере слушающий сервер - оверхед

А ты не думал о том, что кроме html\json\xml сервер по AJAX отдаёт тебе набор HTTP заголовков? И что у тебя размер этих заголовков легко может быть соизмерим с размером всего сообщения, что ты передаёшь.

Пускай node отдает html-ки, а в браузере уже с помощью клиентского js и websockets уже будет взаимодействие

AJAX не поддерживает модель notification, следовательно клиентский код будет вынужден постоянно дёргать сервер, чтобы узнать, а не обновились ли данные (если необходимо поддерживать актуальность данных на клиенте).

Т.е. чтобы поддерживать скажем более менее отзывчивый чатик, тебе AJAX придётся на клиенте дёргать несколько раз в секунду. И каждый раз сервер у тебя будет вынужден обработать запрос и отправить ответ. А клиент принять ответ и дёрнуть callback. И всё это вместо того, чтобы просто дёрнуть callback на прилетевшие в WebSocket данные.

Norgat ★★★★★ ()

WebSockets - протокол для двустороннего обмена сообщениями между клиентом (обычно веб-страницей, в других условиях он ничем не лучше простого TCP) и сервером. Если двусторонний обмен не требуется, есть более лучшие (тм) альтернативы:

* Для отправки сообщений на сервер или «простой» асинхронной загрузки данных (AJAX): да собственно обычный AJAX, старый добрый XHR или новый модный Fetch API

* Для отправки сообщений от сервера к клиенту: EventSource (aka Server Sent events)

annulen ★★★★★ ()
Ответ на: комментарий от Norgat

А ты не думал о том, что кроме html\json\xml сервер по AJAX отдаёт тебе набор HTTP заголовков?

1. Напиши сервер так, чтобы он не отдавал лишние заголовки на эти запросы. Не передавай на них куки.

2. Если сообщение маленькое, то даже с заголовками оно уместится в MTU, если большое, размером заголовков можно пренебречь.

Но да, если надо отсылать много сообщений в секунду, то лучше использовать вебсокет.

annulen ★★★★★ ()
Ответ на: комментарий от mystery

Я против AJAX, потому что он сложный и костыльный

Тут ты не совсем прав. AJAX удобен, если обновление данных не частое и только по инициативе клиента. Если это так, то AJAX'ом вполне удобно тягать text/JSON странички с сервера. В этом случае использование WebSockets будет не слишком удобным (надо управлять коннектом, писать диспатчер сообщений из сокета, а на сервере оборачивать эти сообщения во что-то типа {type: «msg_type», context: {/*content json*/}}, т.к. типов сообщений скорее всего больше одного).

Но вот если сервер должен уведомлять клиента об изменениях контента или же, в довесок, клиент часто шлёт обновления на сервер, то тут WebSockets будет удобен и более чем уместен.

Опять же, просто попробуй реализовать клиент чата (логин, отправка сообщения, приём сообщения, добавление пользователя в список участников, удаление пользователя в список участников) на AJAX и на WebSockets и поймёшь разницу.

А для контраста, чтобы понять, где AJAX логично вписывается в код, попробуй сделать на AJAX и на JSON обработку работы с редактированием поста форума\блога. Т.е. сделать функции редактировать, удалить пост, сохранить обновлённый пост и т.п.

Norgat ★★★★★ ()
Ответ на: комментарий от annulen

long polling уже сто лет назад придумали

Хм, да, не знал о его существовании, т.к. никогда не приходилось юзать (в вёб пришёл когда уже WebSockets были). Сейчас посмотрел как их юзают и ну его. WebSocket удобнее выглядит.

Или остался какой-то смысл кроме legacy в long polling?

Norgat ★★★★★ ()
Ответ на: комментарий от Norgat

Ну в общем, websockets и eventsource в сумме заменяют long polling. Хотя последний может быть проще реализовать на коленке на стороне сервера.

annulen ★★★★★ ()
Ответ на: комментарий от annulen

Ну в общем, websockets и eventsource в сумме заменяют long polling.

Пользователи недообновлённых ослов встрепенулись

Debasher ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.