Sowohl WebSockets als auch vom Server gesendete Ereignisse können Daten an Browser senden. Für mich scheinen sie konkurrierende Technologien zu sein. Was ist der Unterschied zwischen ihnen? Wann würden Sie einen über den anderen wählen?
html
browser
websocket
server-sent-events
Mads Mobæk
quelle
quelle
curl
. Da es sich nur um ein Textformat über HTTP handelt, ist es leicht zu erkennen, was los ist.Antworten:
Websockets und SSE (Server Sent Events) können Daten an Browser senden, sind jedoch keine konkurrierenden Technologien.
Websockets-Verbindungen können sowohl Daten an den Browser senden als auch Daten vom Browser empfangen. Ein gutes Beispiel für eine Anwendung, die Websockets verwenden könnte, ist eine Chat-Anwendung.
SSE-Verbindungen können nur Daten an den Browser senden. Online-Börsenkurse oder Twitter, die die Zeitachse oder den Feed aktualisieren, sind gute Beispiele für eine Anwendung, die von SSE profitieren könnte.
In der Praxis erhält Websockets viel mehr Aufmerksamkeit und Liebe, da alles, was mit SSE getan werden kann, auch mit Websockets erledigt werden kann, und viel mehr Browser unterstützen Websockets als SSE.
Bei einigen Anwendungstypen kann dies jedoch zu viel des Guten sein, und das Backend kann mit einem Protokoll wie SSE einfacher implementiert werden.
Darüber hinaus kann SSE in älteren Browsern, die es nicht nativ unterstützen, mit nur JavaScript polygefüllt werden. Einige Implementierungen von SSE-Polyfills finden Sie auf der Modernizr-Github-Seite .
Fallstricke:
www.example1.com
und weitere 6 SSE-Verbindungen zuwww.example2.com
(danke Phate) öffnen können.HTML5Rocks enthält einige gute Informationen zu SSE. Von dieser Seite:
TLDR-Zusammenfassung:
Vorteile von SSE gegenüber Websockets:
Vorteile von Websockets gegenüber SSE:
Ideale Anwendungsfälle von SSE:
SSE Fallstricke:
quelle
Laut caniuse.com:
Sie können eine Nur-Client-Polyfüllung verwenden, um die Unterstützung von SSE auf viele andere Browser auszudehnen. Dies ist bei WebSockets weniger wahrscheinlich. Einige EventSource-Polyfüllungen:
Wenn Sie alle Browser unterstützen müssen, sollten Sie eine Bibliothek wie web-socket-js , SignalR oder socket.io verwenden, die mehrere Transporte wie WebSockets, SSE, Forever Frame und AJAX Long Polling unterstützt. Diese erfordern häufig auch Änderungen an der Serverseite.
Erfahren Sie mehr über SSE von:
Weitere Informationen zu WebSockets finden Sie unter:
Andere Unterschiede:
quelle
Opera, Chrome, Safari unterstützt SSE, Chrome, Safari unterstützt SSE in SharedWorker Firefox unterstützt XMLHttpRequest readyState interaktiv, sodass wir EventSource polyfil für Firefox erstellen können
quelle
Websocket VS SSE
Web Sockets - Dies ist ein Protokoll, das einen Vollduplex-Kommunikationskanal über eine einzelne TCP-Verbindung bereitstellt. Zum Beispiel eine bidirektionale Kommunikation zwischen dem Server und dem Browser Da das Protokoll komplizierter ist, müssen sich der Server und der Browser auf die Bibliothek des Websockets verlassen
socket.io
SSE (Server-Sent Event) - Im Falle eines vom Server gesendeten Ereignisses wird die Kommunikation nur vom Server zum Browser ausgeführt und der Browser kann keine Daten an den Server senden. Diese Art der Kommunikation wird hauptsächlich verwendet, wenn nur die aktualisierten Daten angezeigt werden sollen. Der Server sendet die Nachricht dann, wenn die Daten aktualisiert werden. Zum Beispiel eine Einwegkommunikation zwischen dem Server und dem Browser. Dieses Protokoll ist weniger kompliziert, sodass Sie sich nicht auf die externe Bibliothek verlassen müssen. JAVASCRIPT selbst bietet die
EventSource
Schnittstelle zum Empfangen der vom Server gesendeten Nachrichten.quelle
Eines ist zu beachten:
Ich hatte Probleme mit Websockets und Unternehmensfirewalls. (Die Verwendung von HTTPS hilft aber nicht immer.)
Siehe https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software https://github.com/sockjs/sockjs-client/issues/94
Ich gehe davon aus, dass es nicht so viele Probleme mit vom Server gesendeten Ereignissen gibt. Aber ich weiß es nicht.
Trotzdem machen WebSockets jede Menge Spaß. Ich habe ein kleines Web-Spiel, das Websockets verwendet (über Socket.IO) ( http://minibman.com )
quelle
Hier ist ein Vortrag über die Unterschiede zwischen Web-Sockets und vom Server gesendeten Ereignissen. Seit Java EE 7 ist eine WebSocket- API bereits Teil der Spezifikation, und es scheint, dass vom Server gesendete Ereignisse in der nächsten Version der Enterprise Edition veröffentlicht werden.
quelle
Das maximale Verbindungslimit ist bei http2 + sse kein Problem.
Es war ein Problem auf http 1
quelle