Websockets и SSE (Server Sent Events) способны передавать данные в браузеры, однако они не являются конкурирующими технологиями.
Соединения Websockets могут отправлять данные в браузер и получать данные из браузера.Хорошим примером приложения, которое может использовать веб-сокеты, является приложение чата.
Соединения SSE могут передавать данные только в браузер.Онлайн котировки акций или твиттеры, обновляющие временную шкалу или фид, являются хорошими примерами приложения, которое могло бы извлечь выгоду из SSE.
На практике, поскольку все, что можно сделать с помощью SSE, можно также сделать с помощью Websockets, Websockets становится многобольше внимания и любви, и гораздо больше браузеров поддерживают веб-сокеты, чем SSE.
Однако для некоторых типов приложений это может оказаться излишним, а бэкэнд может быть проще реализовать с помощью протокола, такого как SSE.
Кроме того, SSE можно использовать в старых браузерах, которые изначально не поддерживают его, используя только JavaScript.Некоторые реализации полизаполнений SSE можно найти на странице Modernizr github .
Замечания:
- SSE имеет ограничение намаксимальное количество открытых соединений, которое может быть особенно болезненным при открытии различных вкладок, поскольку ограничение составляет для браузера и устанавливается на очень низкое число (6).Эта проблема была помечена как «Не будет устранена» в Chrome и Firefox
- Только WS может передавать как двоичные данные, так и UTF-8, SSE ограниченUTF-8.(Спасибо Чадо Нихи).
HTML5Rocks содержит полезную информацию о SSE.С этой страницы:
События, отправленные сервером, против WebSockets
Почему вы выбрали бы события, отправленные сервером, вместо WebSockets?Хороший вопрос.
Одна из причин, по которой SSE остаются в тени, заключается в том, что более поздние API, такие как WebSockets, предоставляют более богатый протокол для двунаправленной полнодуплексной связи.Наличие двустороннего канала более привлекательно для таких вещей, как игры, приложения для обмена сообщениями, а также для случаев, когда вам нужны обновления в реальном времени в обоих направлениях.Однако в некоторых случаях данные не нужно отправлять с клиента.Вам просто нужны обновления от некоторых действий сервера.Примерами могут служить обновления статуса друзей, биржевые сводки, новостные ленты или другие автоматизированные механизмы передачи данных (например, обновление клиентской базы данных Web SQL или хранилища объектов IndexedDB).Если вам нужно отправить данные на сервер, XMLHttpRequest всегда дружит.
SSE отправляются по традиционному HTTP.Это означает, что они не требуют специального протокола или серверной реализации для работы.WebSockets, с другой стороны, требуют полнодуплексных соединений и новых серверов Web Socket для обработки протокола.Кроме того, события, отправляемые сервером, имеют ряд функций, которые отсутствуют в WebSockets, такие как автоматическое переподключение, идентификаторы событий и возможность отправлять произвольные события.
Сводка TLDR:
Преимущества SSE по сравнению с веб-сокетами:
- Транспортируется по простому HTTP вместо пользовательского протокола
- Может быть заполнен javascript до "backport""SSE для браузеров, которые еще не поддерживают его.
- Встроенная поддержка повторного подключения и идентификатор события
- Более простой протокол
ПреимуществаВеб-сокеты по SSE:
- В режиме реального времени, двунаправленная связь.
- Встроенная поддержка в нескольких браузерах
Идеально подходит дляSSE:
- Потоковый тикер
- Обновление твиттера
- Уведомления в браузер
SSE получил:
- Нет бинарной поддержки
- Максимально открытое соединениепредел s