Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
The WebSocket API (WebSockets)
Hinweis: Diese Funktion ist inWeb Workers verfügbar.
DieWebSocket-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: dasWebSocket-Interface und dasWebSocketStream-Interface.
- Das
WebSocket-Interface ist stabil und hat eine gute Unterstützung in Browsern und auf Servern. Allerdings unterstützt es keinenBackpressure. 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 dieStreams-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 dieWebTransport-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 vonWebSocket noch vonWebSocketStream 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 zumbfcache hinzufügen. Es ist daher eine gute Praxis, die Verbindung zu schließen, wenn der Nutzer mit der Seite fertig ist. SieheArbeiten mit dem bfcache.
In diesem Artikel
Schnittstellen
WebSocketDas primäre Interface, um sich mit einem WebSocket-Server zu verbinden und Daten über die Verbindung zu senden und zu empfangen.
WebSocketStreamNicht standardisiertPromise-basiertes Interface zur Verbindung mit einem WebSocket-Server; verwendetStreams zum Senden und Empfangen von Daten über die Verbindung.
CloseEventDas Ereignis, das vom WebSocket-Objekt gesendet wird, wenn die Verbindung geschlossen wird.
MessageEventDas Ereignis, das vom WebSocket-Objekt gesendet wird, wenn eine Nachricht vom Server empfangen wird.
Verwandte HTTP-Header
Die HTTP-Header werden imWebSocket-Handschlag verwendet:
Sec-WebSocket-KeyEin HTTP-Anforderungsheader, der einenNonce vom Client enthält. Dieser wird imWebSocket-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-AcceptEin HTTP-Antwortheader, der imWebSocket-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-VersionEin 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-ProtocolEin 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-ExtensionsEin 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 undwie Sie dies tun können.
- µWebSockets: Hoch skalierbare WebSocket-Server- und Client-Implementierung fürC++11 undNode.js.
- Socket.IO: Ein auf Long-Polling/WebSocket basierendes Drittprotokoll fürNode.js.
- SocketCluster: Ein pub/sub WebSocket-Framework fürNode.js mit Schwerpunkt auf Skalierbarkeit.
- WebSocket-Node: Eine WebSocket-Server-API-Implementierung fürNode.js.
- Total.js: Web-Anwendungsframework fürNode.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ürNode.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 eineGo-Implementierung des WebSocket-Protokolls.
Spezifikationen
| Specification |
|---|
| WebSockets> # the-websocket-interface> |