@BonBonSlick
Как выбрать между двумя?
Тестовый пример для рассмотрения, чат на подобии Slack / Discord.
Ауидо + Видео, сообщения.
Чат Группы и их подгруппы, комнаты.
Чат 1 на 1, или создавать конференции 1+ людей.
Приходилось использовать и то и другое, но скорее поддержка нежели написание с нуля, вот и не было времени понять почему было выбрано то что было выбрано.
Решения вопроса 2
@bingo347
SSE — односторонний (только сервер шлет данные) текстовый протокол.
Оба работают поверх HTTP, но Websocket делает Switch Protocol (101 код ответа), а SSE — нет.
Websocket — требует дополнительной логики для кодирования/декодирования фреймов (сообщений). В браузере такая логика встроена и предоставляется объектом WebSocket, на других платформах как правило реализация протокола — забота программиста.
То что протокол двухсторонний означает, что любая сторона может послать данные в любой момент времени. Механизм запрос/ответ при этом в протоколе не реализован, но может быть сделан в нижележащих протоколах.
То что протокол бинарный означает, что через него можно передавать любые данные без ограничений.
То что протокол работает поверх HTTP — дает возможность при инициализации соединения отправить дополнительные данные в URI или заголовках (в браузере заголовки не доступны, однако отправляются куки согласно общим политикам)
SSE — это по сути обычный HTTP GET запрос с продолжительным ответом. А значит не требуется дополнительной логики для реализации, по сути это обычный HTTP.
Клиент может отправить свои данные только при инициализации в URI или заголовках (браузерная реализация опять таки не дает доступа к управлению заголовками, но хотя бы позволяет управлять отправкой кук, которые по умолчанию отправляются только на текущий домен, а для случая CORS их можно включить).
Сервер может отправлять любое количество текстовых сообщений, каждая строка начинается с "data: "
, сообщение заканчивается двойным символом перевода строки, так же опционально может быть передан id сообщения отдельной строкой перед сообщением.
То что протокол текстовый — ограничивает передаваемые данные только текстом (например валидным utf8).
SSE в целом дешевле и по ресурсам и по передаваемому трафику, но имеет ряд ограничений по сравнению с WebSocket.
По поддержки браузерами у этих технологий все примерно одинаково, и на сегодняшний день можно смело утверждать, что поддержка обеих технологий есть везде.
1
комментарий
Ответы на вопрос 0