The WebSocket API (WebSockets)
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die WebSocket-API ermöglicht es, eine bidirektionale interaktive Kommunikationssitzung zwischen dem Browser des Nutzers und einem Server zu öffnen. Mit dieser API können Sie Nachrichten an einen Server senden und Antworten empfangen, ohne den Server ständig abfragen zu müssen.
Die WebSocket-API bietet zwei alternative Mechanismen zum Erstellen und Verwenden von WebSocket-Verbindungen: die WebSocket
-Schnittstelle und die WebSocketStream
-Schnittstelle.
- Die
WebSocket
-Schnittstelle ist stabil und hat eine gute Unterstützung durch Browser und Server. Sie unterstützt jedoch kein Backpressure. Dadurch kann es vorkommen, dass bei schnellerem Nachrichtenempfang, als die Anwendung verarbeiten kann, der Speicher des Geräts stark gefüllt wird, die Anwendung aufgrund von 100% CPU-Auslastung nicht mehr reagiert oder beides geschieht. - Die
WebSocketStream
-Schnittstelle ist einePromise
-basierte Alternative zuWebSocket
. Sie verwendet die Streams API, um den Versand und Empfang von Nachrichten zu verwalten, wodurch WebSocket-Verbindungen automatisch von der Stream-Backpressure profitieren können. Dies reguliert die Lese- oder Schreibgeschwindigkeit, um Engpässe in der Anwendung zu vermeiden. Allerdings istWebSocketStream
nicht standardisiert und wird derzeit lediglich von einer Rendering-Engine unterstützt.
Zusätzlich ist zu erwarten, dass die WebTransport-API die WebSocket-API für viele Anwendungen ersetzen wird. WebTransport ist eine vielseitige, niedrigstufige API, die Backpressure und viele andere Funktionen bietet, die weder von WebSocket
noch von WebSocketStream
unterstützt werden – wie unidirektionale Streams, nicht in der richtigen Reihenfolge gelieferte Übertragungen und unzuverlässige Datenübertragung via Datagramme. WebTransport ist komplexer zu verwenden als WebSockets und hat keine so breite plattformübergreifende Unterstützung, ermöglicht jedoch die Implementierung anspruchsvoller Lösungen. Wenn standardisierte WebSocket-Verbindungen gut zu Ihrem Anwendungsfall passen und Sie breite Browser-Kompatibilität benötigen, sollten Sie die WebSocket-API nutzen, um schnell eine Lösung zu implementieren. Wenn Ihre Anwendung jedoch eine nicht standardisierte, individuelle Lösung erfordert, sollten Sie die WebTransport-API verwenden.
Hinweis: Eine WebSocket-Verbindung ist funktional ähnlich zu standardmäßigen Unix-Sockets, sie sind jedoch nicht miteinander verwandt.
Schnittstellen
WebSocket
-
Die primäre Schnittstelle zur Verbindung mit einem WebSocket-Server sowie zum Versenden und Empfangen von Daten über die Verbindung.
WebSocketStream
Nicht standardisiert-
Promise-basierte Schnittstelle zur Verbindung mit einem WebSocket-Server; nutzt Streams zum Senden und Empfangen von Daten über die Verbindung.
CloseEvent
-
Das Ereignis, das vom WebSocket-Objekt gesendet wird, wenn die Verbindung geschlossen wird.
MessageEvent
-
Das Ereignis, das vom WebSocket-Objekt gesendet wird, wenn eine Nachricht vom Server empfangen wird.
Verwandte HTTP-Header
Die HTTP-Header werden im WebSocket-Handshake verwendet:
Sec-WebSocket-Key
-
Ein HTTP-Anforderungs-Header, der einen Nonce des Clients enthält. Dieser wird im WebSocket-Eröffnungshandshake verwendet, um zu überprüfen, dass der Client die Eröffnung einer WebSocket ausdrücklich beabsichtigt. Der Header wird automatisch vom Browser hinzugefügt.
Sec-WebSocket-Accept
-
Ein HTTP-Antwort-Header, der im WebSocket-Eröffnungshandshake verwendet wird, um anzuzeigen, dass der Server bereit ist, auf eine WebSocket-Verbindung hochzustufen. Der Wert in der Direktive wird aus dem Wert von
Sec-WebSocket-Key
in der entsprechenden Anfrage berechnet. Sec-WebSocket-Version
-
Ein HTTP-Header, der in Anfragen die vom Client unterstützte Version des WebSocket-Protokolls angibt. In Antworten wird er nur gesendet, wenn die angeforderte Protokollversion vom Server nicht unterstützt wird, und listet die vom Server unterstützten Versionen auf.
Sec-WebSocket-Protocol
-
Ein HTTP-Header, der in Anfragen die vom Client unterstützten Subprotokolle in bevorzugter Reihenfolge angibt. In Antworten gibt er das vom Server aus den Präferenzen des Clients ausgewählte Subprotokoll an.
Sec-WebSocket-Extensions
-
Ein HTTP-Header, der in Anfragen die vom Client unterstützten WebSocket-Erweiterungen in bevorzugter Reihenfolge angibt. In Antworten gibt er die vom Server aus den Präferenzen des Clients ausgewählte Erweiterung an.
Leitfäden
Werkzeuge
- AsyncAPI: Eine Spezifikation zur Beschreibung ereignisgesteuerter Architekturen auf Basis von Protokollen wie WebSocket. Sie können es verwenden, um WebSocket-basierte APIs zu beschreiben, ähnlich wie REST-APIs mit der OpenAPI-Spezifikation beschrieben werden. Erfahren Sie warum Sie AsyncAPI mit WebSocket verwenden sollten und wie Sie es tun.
- µWebSockets: Hoch skalierbare Implementierung von WebSocket-Server und -Client für C++11 und Node.js.
- Socket.IO: Ein Long-Polling/WebSocket-basiertes, Drittanbieter-Übertragungsprotokoll für Node.js.
- SocketCluster: Ein Pub/Sub-WebSocket-Framework für Node.js mit Schwerpunkt auf Skalierbarkeit.
- WebSocket-Node: Eine WebSocket-Server-API-Implementierung für Node.js.
- Total.js: Webanwendungs-Framework für Node.js (Beispiel: WebSocket-Chat)
- SignalR: SignalR verwendet WebSockets, wenn diese verfügbar sind, und greift nahtlos auf andere Techniken und Technologien zurück, wenn dies nicht der Fall ist, während Ihr Anwendungscode unverändert bleibt.
- Caddy: Ein Webserver, der beliebige Kommandos (stdin/stdout) als WebSocket weiterleiten kann.
- ws: Eine beliebte WebSocket-Client-&-Server-Bibliothek für Node.js.
- cowboy: Cowboy ist ein kleiner, schneller und moderner HTTP-Server für Erlang/OTP mit WebSocket-Unterstützung.
- ZeroMQ: ZeroMQ ist eine einbettbare Netzwerklibrary, die Nachrichten über In-Prozess, IPC, TCP, UDP, TIPC, Multicast und WebSocket überträgt.
- WebSocket King: Ein Client-Tool zur Entwicklung, zum Testen und zur Arbeit mit WebSocket-Servern.
- PHP WebSocket Server: Server geschrieben in PHP für die Verbindung über WebSockets
wss://
oderws://
sowie normale Sockets überssl://
,tcp://
. - Django Channels: Django-Bibliothek mit Unterstützung für WebSockets (und andere Protokolle, die lang laufende asynchrone Verbindungen erfordern).
- (Phoenix) Channels: Skalierbare Echtzeit-Kommunikation mit WebSocket im Phoenix-Framework von Elixir.
- Phoenix LiveView: Interaktive Echtzeit-Weberlebnisse via WebSocket im Phoenix-Framework von Elixir.
- Flask-SocketIO: Erlaubt Flask-Anwendungen, niedrig-latenzige bidirektionale Kommunikation zwischen dem Client und dem Server zu nutzen.
- Gorilla WebSocket: Gorilla WebSocket ist eine Go-Implementierung des WebSocket-Protokolls.
Spezifikationen
Specification |
---|
WebSockets # the-websocket-interface |
Browser-Kompatibilität
api.WebSocket
BCD tables only load in the browser
api.WebSocketStream
BCD tables only load in the browser