Подойдет ли SSE или оставить WebSocket?

Доброго времени суток.
Есть внутрисетевое web-приложение, в данный момент оно функционирует следующим образом - серверная часть написана на node.js с использованием express и socket.io. Для отправки каких либо изменений с клиента на сервер используются обычные post-запросы и после внесения изменений сервер делает рассылку данных изменений при помощи комнат socket.io определенному списку пользователей.
Сейчас хотим переписать данный сервис используя Koa.js и http2, и хочется понять может ли SSE в нашем случае заменить вебсокеты или нет? Из материалов в интернете это не совсем ясно. Конкретно, я не нашел информации можно ли сделать что-то типа подписок на каналы или рассылки другим подключенным пользователям...
  • Вопрос задан
  • 450 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
И SSE и WS - протоколы поверх http, оба могут работать поверх http/2 и иметь мультиплексирование
Но есть между ними и различия:
WS обеспечивает двухстороннюю связь, после установления рукопожатия любая сторона может слать сообщения, протокол бинарный, все сообщения кодируются в бинарные message-frame, что требует доп библиотек на стороне сервера (на браузере такая идет в стандартном апи), зато позволяет передавать как бинарные так и текстовые данные
SSE - односторонняя связь, только от сервера к клиенту, клиент может передать данные только в url при открытии соеденения, дальше вещает только сервер, протокол текстовый, если есть бинарные данные их придется обернуть в base64 (например), с точки зрения сервера - это обычный GET запрос, который сервер не закрывает, а просто шлет данные в http body в особом формате, делая периодически flush соединения (в идеале после каждого сообщения)

Все остальное, вроде комнат и т.д. - надстройки библиотек и не более
В случае koa - по дефолту он завершает запрос когда зарезолвится промис из последнего middleware, для SSE придется это обходить
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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