The WebSocket API (WebSockets)
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die WebSocket API ermöglicht es, eine bidirektionale interaktive Kommunikationssitzung zwischen dem Browser des Benutzers und einem Server zu öffnen. Mit dieser API können Sie Nachrichten an einen Server senden und Antworten erhalten, 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 verfügt über eine gute Unterstützung durch Browser und Server. Es unterstützt jedoch keinen Backpressure. Daher wird bei Nachrichten, die schneller eintreffen, als die Anwendung sie verarbeiten kann, entweder der Speicher des Geräts gefüllt, indem diese Nachrichten zwischengespeichert werden, oder die Anwendung wird aufgrund von 100% CPU-Auslastung nicht mehr reagiert oder beides. - Das
WebSocketStream
-Interface ist einePromise
-basierte Alternative zuWebSocket
. Es verwendet die Streams API, um den Empfang und das Senden von Nachrichten zu verwalten, was bedeutet, dass Socket-Verbindungen automatisch von der Rückdruckregelung von Streams profitieren können, um die Lese- oder Schreibgeschwindigkeit zu regulieren und Engpässe in der Anwendung zu vermeiden.WebSocketStream
ist jedoch nicht standardisiert und wird derzeit nur von einer Rendering-Engine unterstützt.
Darüber hinaus wird erwartet, dass die WebTransport API die WebSocket API für viele Anwendungen ersetzen wird. WebTransport ist eine vielseitige, niedrigstufige API, die Rückdruck und viele andere Funktionen bietet, die weder von WebSocket
noch von WebSocketStream
unterstützt werden, wie unidirektionale Streams, in falscher Reihenfolge zugestellte Nachrichten und unsichere Datenübertragung mittels Datagrammen. WebTransport ist komplexer in der Anwendung als WebSockets und die plattformübergreifende Unterstützung ist nicht so umfassend, ermöglicht jedoch die Implementierung komplexer Lösungen. Wenn Standard-WebSocket-Verbindungen gut zu Ihrem Anwendungsfall passen und Sie eine breite Browser-Kompatibilität benötigen, sollten Sie die WebSocket API verwenden, um schnell betriebsbereit zu sein. Wenn Ihre Anwendung jedoch eine nicht standardmäßige, maßgeschneiderte Lösung erfordert, sollten Sie die WebTransport API verwenden.
Hinweis: Während eine WebSocket-Verbindung funktional etwas mit Standard-Unix-Sockets vergleichbar ist, sind sie nicht miteinander verwandt.
Schnittstellen
WebSocket
-
Die primäre Schnittstelle zum Verbinden mit einem WebSocket-Server und zum Senden und Empfangen von Daten über die Verbindung.
WebSocketStream
Nicht standardisiert-
Verspricht-basierte Schnittstelle zum Verbinden mit einem WebSocket-Server; verwendet Streams, um Daten über die Verbindung zu senden und zu empfangen.
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 eine Nonce vom Client enthält. Dieser wird im WebSocket-Öffnungshandshake verwendet, um zu überprüfen, dass der Client ausdrücklich eine WebSocket-Verbindung öffnen möchte. 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, zu einer WebSocket-Verbindung zu wechseln. 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 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 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 zur Beschreibung WebSocket-basierter APIs verwenden, genau wie Sie REST-APIs mit der OpenAPI-Spezifikation beschreiben würden. Erfahren Sie warum Sie AsyncAPI mit WebSocket in Betracht ziehen 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 langes Polling/WebSocket-basiertes Drittanbieter-Übertragungsprotokoll für Node.js.
- SocketCluster: Ein Pub/Sub-WebSocket-Framework für Node.js mit Fokus 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 im Hintergrund, wenn sie verfügbar sind, und fällt bei Nichtverfügbarkeit elegant auf andere Techniken und Technologien zurück, während Ihr Anwendungscode gleich bleibt.
- Caddy: Ein Web-Server, der in der Lage ist, beliebige Befehle (stdin/stdout) als Websocket zu proxyen.
- 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 Netzwerkbibliothek, die Nachrichten zwischen Prozessen, IPC, TCP, UDP, TIPC, Multicast und WebSocket überträgt.
- WebSocket King: Ein Client-Tool zur Unterstützung der Entwicklung, des Testens und der Arbeit mit WebSocket-Servern.
- PHP WebSocket Server: Server, geschrieben in PHP, um Verbindungen über Websockets
wss://
oderws://
und normale Sockets überssl://
,tcp://
zu verwalten. - Django Channels: Django-Bibliothek, die Unterstützung für WebSockets (und andere Protokolle, die lang laufende asynchrone Verbindungen erfordern) hinzufügt.
- (Phoenix) Channels: Skalierbare Echtzeit-Kommunikation mit WebSocket im Elixir Phoenix Framework.
- Phoenix LiveView: Echtzeit-interaktive Web-Erlebnisse durch WebSocket im Elixir Phoenix Framework.
- Flask-SocketIO: gibt Flask-Anwendungen Zugriff auf latenzarme bidirektionale Kommunikation zwischen den Clients und dem Server.
- Gorilla WebSocket: Gorilla WebSocket ist eine Go Implementierung des WebSocket-Protokolls.
Spezifikationen
Specification |
---|
WebSockets Standard # the-websocket-interface |
Browser-Kompatibilität
api.WebSocket
BCD tables only load in the browser
api.WebSocketStream
BCD tables only load in the browser