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 eröffnen. Mit dieser API können Sie Nachrichten an einen Server senden und Antworten empfangen, ohne den Server nach einer Antwort abfragen zu müssen.
Die WebSocket-API bietet zwei alternative Mechanismen zum Erstellen und Verwenden von WebSocket-Verbindungen: das WebSocket-Interface und das WebSocketStream-Interface.
- Das
WebSocket-Interface ist stabil und hat eine gute Unterstützung in Browsern und auf Servern. Allerdings unterstützt es keinen Backpressure. Daher kann es passieren, dass der Speicher des Geräts mit der Pufferung von Nachrichten gefüllt wird oder das System aufgrund 100%iger CPU-Auslastung unempfänglich wird, wenn Nachrichten schneller ankommen, als die Anwendung sie verarbeiten kann. - Das
WebSocketStream-Interface ist einePromise-basierte Alternative zuWebSocket. Es verwendet die Streams-API, um das Empfangen und Senden von Nachrichten zu handhaben, was bedeutet, dass Socket-Verbindungen automatisch von der Stream-Backpressure profitieren können und die Geschwindigkeit des Lesens oder Schreibens regulieren, um Engpässe in der Anwendung zu vermeiden. Allerdings istWebSocketStreamnicht standardisiert und derzeit nur in einer Rendering-Engine unterstützt.
Zusätzlich wird erwartet, dass die WebTransport-API für viele Anwendungen die WebSocket-API 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, unordentliche Lieferung und unzuverlässige Datenübertragung über Datagramme. WebTransport ist komplexer in der Anwendung als WebSockets und die Unterstützung in verschiedenen Browsern ist nicht so breit gefächert, aber sie ermöglicht die Implementierung ausgeklügelter Lösungen. Wenn standardmäßige WebSocket-Verbindungen gut zu Ihrem Anwendungsfall passen und Sie eine breite Browser-Kompatibilität benötigen, sollten Sie die WebSockets-API verwenden, um schnell einsatzbereit zu sein. Wenn Ihre Anwendung jedoch eine nicht standardmäßige, maßgeschneiderte Lösung erfordert, sollten Sie die WebTransport-API nutzen.
Hinweis: Wenn eine Seite eine offene WebSocket-Verbindung hat, kann der Browser diese möglicherweise nicht zum bfcache hinzufügen. Es ist daher eine gute Praxis, die Verbindung zu schließen, wenn der Nutzer mit der Seite fertig ist. Siehe Arbeiten mit dem bfcache.
Schnittstellen
WebSocket-
Das primäre Interface, um sich mit einem WebSocket-Server zu verbinden und Daten über die Verbindung zu senden und zu empfangen.
WebSocketStreamNicht standardisiert-
Promise-basiertes Interface zur Verbindung mit einem WebSocket-Server; verwendet 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-Handschlag verwendet:
Sec-WebSocket-Key-
Ein HTTP-Anforderungsheader, der einen Nonce vom Client enthält. Dieser wird im WebSocket-Eröffnungs-Handschlag verwendet, um zu überprüfen, dass der Client ausdrücklich die Absicht hat, einen WebSocket zu öffnen. Er wird vom Browser automatisch hinzugefügt.
Sec-WebSocket-Accept-
Ein HTTP-Antwortheader, der im WebSocket-Eröffnungs-Handschlag verwendet wird, um anzuzeigen, dass der Server bereit ist, auf eine WebSocket-Verbindung zu aktualisieren. Der Wert in der Anweisung 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 die Versionen auflistet, die der Server unterstützt.
Sec-WebSocket-Protocol-
Ein HTTP-Header, der in Anfragen die vom Client in bevorzugter Reihenfolge unterstützten Sub-Protokolle angibt. In Antworten gibt er das vom Server aus den Präferenzen des Clients ausgewählte Sub-Protokoll an.
Sec-WebSocket-Extensions-
Ein HTTP-Header, der in Anfragen die vom Client in bevorzugter Reihenfolge unterstützten WebSocket-Erweiterungen 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 basierend auf Protokollen wie WebSocket. Sie können es verwenden, um WebSocket-basierte APIs zu 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 auf Long-Polling/WebSocket basierendes Drittprotokoll 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-Anwendungsframework für Node.js (Beispiel: WebSocket-Chat)
- SignalR: SignalR verwendet WebSockets im Hintergrund, wenn sie verfügbar sind, und wechselt elegant zu anderen Techniken und Technologien, wenn dies nicht der Fall ist, während Ihr Anwendungscode gleich bleibt.
- Caddy: Ein Webserver, der beliebige Befehle (stdin/stdout) als WebSocket umleiten kann.
- ws: eine beliebte WebSocket-Client- und 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 Netzbibliothek, die Nachrichten über In-Prozess, IPC, TCP, UDP, TIPC, Multicast und WebSocket überträgt.
- WebSocket King: Ein Client-Tool, um die Entwicklung, das Testen und Arbeiten mit WebSocket-Servern zu unterstützen.
- PHP WebSocket Server: Server, der in PHP geschrieben wurde, um Verbindungen über WebSockets
wss://oderws://und normale Sockets überssl://,tcp://zu handhaben. - Django Channels: Django-Bibliothek, die Unterstützung für WebSockets (und andere Protokolle, die langfristige asynchrone Verbindungen erfordern) hinzufügt.
- Phoenix Channels: Skalierbare Echtzeitkommunikation über WebSocket im Elixir-Phoenix-Framework.
- Phoenix LiveView: Echtzeit interaktive Web-Erlebnisse über WebSocket im Elixir-Phoenix-Framework.
- Flask-SocketIO: gibt Flask-Anwendungen Zugriff auf latenzarme bidirektionale Kommunikation zwischen Clients und dem Server.
- Gorilla WebSocket: Gorilla WebSocket ist eine Go-Implementierung des WebSocket-Protokolls.
Spezifikationen
| Specification |
|---|
| WebSockets> # the-websocket-interface> |