И WebSockets, и события, отправленные сервером , могут передавать данные в браузеры. Мне они кажутся конкурирующими технологиями. В чем разница между ними? Когда бы вы выбрали один над другим?
html
browser
websocket
server-sent-events
Мадс Мобек
источник
источник
curl
. Поскольку это просто текстовый формат по HTTP, легко увидеть, что происходит.Ответы:
Websockets и SSE (Server Sent Events) способны передавать данные в браузеры, однако они не являются конкурирующими технологиями.
Соединения через веб-сокеты могут отправлять данные в браузер и получать данные из браузера. Хорошим примером приложения, которое может использовать websockets, является приложение чата.
SSE-соединения могут передавать данные только в браузер. Онлайн котировки акций или твиттеры, обновляющие сроки или фид, являются хорошими примерами приложения, которое может извлечь выгоду из SSE.
На практике, поскольку все, что можно сделать с помощью SSE, можно также сделать с помощью Websockets, Websockets привлекает гораздо больше внимания и любви, и многие другие браузеры поддерживают Websockets, чем SSE.
Тем не менее, это может быть излишним для некоторых типов приложений, и бэкэнд может быть проще реализовать с помощью протокола, такого как SSE.
Кроме того, SSE можно использовать в старых браузерах, которые изначально не поддерживают его, используя только JavaScript. Некоторые реализации полизаполнений SSE можно найти на странице gizub Modernizr .
Gotchas:
www.example1.com
и еще 6 подключений SSEwww.example2.com
(спасибо Phate).HTML5Rocks имеет хорошую информацию о SSE. С этой страницы:
Резюме TLDR:
Преимущества SSE перед Websockets:
Преимущества веб-сокетов перед SSE:
Идеальные варианты использования SSE:
SSE получил:
источник
По данным caniuse.com:
Вы можете использовать клиентский полифилл, чтобы расширить поддержку SSE для многих других браузеров. Это менее вероятно с WebSockets. Некоторые полифилы EventSource:
Если вам необходимо поддерживать все браузеры, рассмотрите возможность использования библиотеки, такой как web-socket-js , SignalR или socket.io, которая поддерживает несколько транспортов, таких как WebSockets, SSE, Forever Frame и AJAX long polling. Они часто требуют изменений и на стороне сервера.
Узнайте больше о SSE от:
Узнайте больше о WebSockets от:
Другие отличия:
источник
Opera, Chrome, Safari поддерживает SSE, Chrome, Safari поддерживает SSE внутри SharedWorker. Firefox поддерживает интерактивный XMLHttpRequest readyState, поэтому мы можем сделать EventSource polyfil для Firefox.
источник
Websocket VS SSE
Веб-сокеты - это протокол, который обеспечивает полнодуплексный канал связи по одному TCP-соединению. Например, двусторонняя связь между сервером и браузером. Поскольку протокол более сложный, сервер и браузер должны полагаться на библиотеку веб-сокета, которая
socket.io
SSE (отправленное сервером событие) - в случае отправленного сервером события связь осуществляется только с сервера на браузер, и браузер не может отправлять какие-либо данные на сервер. Этот вид связи в основном используется, когда нужно только показать обновленные данные, тогда сервер отправляет сообщение всякий раз, когда данные обновляются. Например, односторонняя связь между сервером и браузером. Этот протокол менее сложен, поэтому нет необходимости полагаться на внешнюю библиотеку. JAVASCRIPT сам предоставляет
EventSource
интерфейс для приема сообщений, отправленных сервером.источник
Стоит отметить:
у меня были проблемы с веб-сокетами и корпоративными брандмауэрами. (Использование HTTPS помогает, но не всегда.)
См. Https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software https://github.com/sockjs/sockjs-client/issues/94.
Я предполагаю, что с событиями, отправленными сервером, проблем не так много. Но я не знаю
Тем не менее, WebSockets тонны веселья. У меня есть небольшая веб-игра, которая использует веб-сокеты (через Socket.IO) ( http://minibman.com )
источник
Здесь рассказывается о различиях между веб-сокетами и событиями, отправляемыми сервером. Начиная с Java EE 7 WebSocket API уже является частью спецификации, и кажется, что отправленные сервером события будут выпущены в следующей версии корпоративной версии.
источник
Максимальный лимит соединения не проблема с http2 + sse.
Это была проблема на http 1
источник