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 Benutzers und einem Server zu eröffnen. Mit dieser API können Sie Nachrichten an einen Server senden und Antworten empfangen, ohne den Server auf eine Antwort anfragen zu müssen.
Die WebSocket API bietet zwei alternative Mechanismen für die Erstellung und Nutzung von WebSocket-Verbindungen: das WebSocket-Interface und das WebSocketStream-Interface.
- Das
WebSocket-Interface ist stabil und hat eine gute Unterstützung durch Browser und Server, unterstützt jedoch keinen Backpressure. Infolgedessen, wenn Nachrichten schneller ankommen, als die Anwendung sie verarbeiten kann, wird entweder der Gerätespeicher durch Puffern dieser Nachrichten gefüllt, es wird aufgrund 100%iger CPU-Auslastung nicht mehr ansprechbar oder beides. - Das
WebSocketStream-Interface ist einePromise-basierte Alternative zuWebSocket. Es nutzt die Streams API zur Verarbeitung des Empfangs und Sendens von Nachrichten, was bedeutet, dass Socket-Verbindungen automatisch von Stream-Backpressure profitieren können, indem die Lese- oder Schreibgeschwindigkeit geregelt wird, um Engpässe in der Anwendung zu vermeiden.WebSocketStreamist jedoch nicht standardisiert und wird derzeit nur von einer Rendering-Engine unterstützt.
Zusätzlich wird erwartet, dass die WebTransport API die WebSocket API für viele Anwendungen ersetzt. WebTransport ist eine vielseitige, niedrigstufige API, die Backpressure und viele weitere Funktionen bietet, die weder WebSocket noch WebSocketStream unterstützen, wie unidirektionale Streams, außerordentliche Reihenfolge der Nachrichtenübermittlung und unzuverlässige Datenübertragung über Datagramme. WebTransport ist komplizierter zu verwenden als WebSockets und die Unterstützung durch verschiedene Browser ist nicht so breit, aber es ermöglicht die Umsetzung komplexer Lösungen. Wenn standardisierte WebSocket-Verbindungen gut für Ihren Anwendungsfall geeignet sind und Sie eine breite Browser-Kompatibilität benötigen, sollten Sie die WebSockets API verwenden, um schnell starten zu können. Wenn Ihre Anwendung jedoch eine nicht standardmäßige, maßgeschneiderte Lösung erfordert, sollten Sie die WebTransport API verwenden.
Hinweis: Wenn eine Seite über eine offene WebSocket-Verbindung verfügt, wird der Browser sie möglicherweise nicht in den bfcache aufnehmen. Es ist daher eine gute Praxis, die Verbindung zu schließen, wenn der Benutzer mit der Seite fertig ist. Siehe Arbeiten mit dem bfcache.
Schnittstellen
WebSocket-
Die primäre Schnittstelle zum Verbinden mit einem WebSocket-Server und zum Senden und Empfangen von Daten über die Verbindung.
WebSocketStreamNicht standardisiert-
Promise-basierte Schnittstelle zum Verbinden mit einem WebSocket-Server; verwendet Streams, um Daten über die Verbindung zu senden und zu empfangen.
CloseEvent-
Das Ereignis, das von dem WebSocket-Objekt gesendet wird, wenn die Verbindung geschlossen wird.
MessageEvent-
Das Ereignis, das von dem 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-Öffnungshandshake verwendet, um zu überprüfen, dass der Client ausdrücklich beabsichtigt, einen WebSocket zu öffnen. Er wird automatisch vom Browser hinzugefügt.
Sec-WebSocket-Accept-
Ein HTTP-Antwort-Header, der im WebSocket-Öffnungshandshake verwendet wird, um anzuzeigen, dass der Server bereit ist, auf eine WebSocket-Verbindung umzusteigen. Der Wert in der Direktive wird aus dem Wert von
Sec-WebSocket-Keyin der entsprechenden Anfrage berechnet. Sec-WebSocket-Version-
Ein HTTP-Header, der in Anfragen die vom Client verstandene 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 von dem Server aus den Präferenzen des Clients ausgewählte Erweiterung an.
Leitfäden
Tools
- AsyncAPI: Eine Spezifikation zur Beschreibung ereignisgesteuerter Architekturen, die auf Protokollen wie WebSocket basieren. Sie können damit WebSocket-basierte APIs beschreiben, genauso wie Sie REST-APIs mit der OpenAPI-Spezifikation beschreiben würden. Erfahren Sie, warum Sie AsyncAPI mit WebSocket verwenden sollten und wie Sie dies tun können.
- µWebSockets: Hoch skalierbare WebSocket-Server- und Client-Implementierung für C++11 und Node.js.
- Socket.IO: Ein drittes Übertragungsprotokoll basierend auf Long Polling/WebSocket 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: Web-Anwendungs-Framework für Node.js (Beispiel: WebSocket-Chat)
- SignalR: SignalR wird WebSockets unter der Haube verwenden, wenn diese verfügbar sind, und nahtlos auf andere Techniken und Technologien zurückgreifen, wenn dies nicht der Fall ist, während Ihr Anwendungs-Code gleich bleibt.
- Caddy: Ein Webserver, der beliebige Befehle (stdin/stdout) als WebSocket proxyfähig machen 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: Eine einbettbare Netzwerklibrary, die Nachrichten über In-Prozesse, IPC, TCP, UDP, TIPC, Multicast und WebSocket transportiert.
- WebSocket King: Ein Client-Tool, um WebSocket-Server zu entwickeln, zu testen, und mit ihnen zu arbeiten.
- PHP WebSocket Server: Server, geschrieben in PHP, zur Behandlung von Verbindungen über WebSockets
wss://oderws://und normale Sockets überssl://,tcp://. - Django Channels: Django-Bibliothek, die Unterstützung für WebSockets (und andere Protokolle, die langlaufende asynchrone Verbindungen erfordern) hinzufügt.
- (Phoenix) Channels: Skalierbare Echtzeit-Kommunikation mittels WebSocket im Elixir-Phoenix-Framework.
- Phoenix LiveView: Echtzeit-interaktive Web-Erlebnisse über WebSocket im Elixir-Phoenix-Framework.
- Flask-SocketIO: Gibt Flask-Anwendungen Zugang zu latenzarmen bidirektionalen Kommunikation zwischen den Clients und dem Server.
- Gorilla WebSocket: Gorilla WebSocket ist eine Go-Implementierung des WebSocket-Protokolls.
Spezifikationen
| Spezifikation |
|---|
| WebSockets> # the-websocket-interface> |