WebSocket API (WebSockets)
Baseline
Weitgehend verfügbar
*
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die WebSocket API ermöglicht es, eine interaktive Zwei-Wege-Kommunikationssitzung zwischen dem Browser einer Person und einem Server zu öffnen. Mit dieser API können Sie Nachrichten an einen Server senden und Antworten empfangen, ohne den Server wiederholt nach einer Antwort abfragen zu müssen.
Das WebSocket-Interface unterstützt kein Backpressure. Wenn Nachrichten schneller eintreffen, als die Anwendung sie verarbeiten kann, füllen die zwischengespeicherten Nachrichten daher möglicherweise den Gerätespeicher, die Anwendung reagiert aufgrund einer CPU-Auslastung von 100 % nicht mehr oder beides tritt ein. Falls Backpressure erforderlich ist, verwenden Sie stattdessen die WebTransport API: Sie unterstützt Backpressure und viele weitere Funktionen, die WebSocket nicht bietet, etwa unidirektionale Streams, die Zustellung außerhalb der ursprünglichen Reihenfolge und eine unzuverlässige Datenübertragung per Datagramm. Das WebSocketStream-Interface ist ein früherer Versuch, das Backpressure-Problem zu lösen. Es ist jedoch nicht standardisiert und wird weniger breit unterstützt als die WebTransport API.
Hinweis: Wenn eine Seite eine offene WebSocket-Verbindung hat, nimmt der Browser sie möglicherweise nicht in den bfcache auf. Es empfiehlt sich daher, die Verbindung zu schließen, wenn die Person die Seite nicht mehr verwendet. Weitere Informationen finden Sie unter Arbeiten mit dem bfcache.
Leitfäden
Interfaces
WebSocket-
Das primäre Interface, um eine Verbindung zu einem WebSocket-Server herzustellen und anschließend Daten über die Verbindung zu senden und zu empfangen.
WebSocketStream-
Promise-basiertes Interface zum Herstellen einer Verbindung zu einem WebSocket-Server; verwendet Streams, um Daten über die Verbindung zu senden und zu empfangen.
CloseEvent-
Das Event, das das WebSocket-Objekt sendet, wenn die Verbindung geschlossen wird.
MessageEvent-
Das Event, das das WebSocket-Objekt sendet, wenn eine Nachricht vom Server empfangen wird.
Zugehörige HTTP-Header
Die HTTP-Header werden beim WebSocket-Handshake verwendet:
Sec-WebSocket-Key-
Ein HTTP-Request-Header, der eine Nonce des Clients enthält. Sie wird beim WebSocket-Opening-Handshake verwendet, um zu überprüfen, ob der Client ausdrücklich eine WebSocket-Verbindung öffnen möchte. Der Browser fügt den Header automatisch hinzu.
Sec-WebSocket-Accept-
Ein HTTP-Response-Header, der beim WebSocket-Opening-Handshake angibt, dass der Server bereit ist, auf eine WebSocket-Verbindung zu wechseln. Der Wert der Direktive wird aus dem Wert von
Sec-WebSocket-Keyim zugehörigen Request berechnet. Sec-WebSocket-Version-
Ein HTTP-Header, der in Requests die Version des WebSocket-Protokolls angibt, die der Client unterstützt. In Responses wird er nur gesendet, wenn der Server die angeforderte Protokollversion nicht unterstützt. Er listet dann die vom Server unterstützten Versionen auf.
Sec-WebSocket-Protocol-
Ein HTTP-Header, der in Requests die vom Client unterstützten Subprotokolle in bevorzugter Reihenfolge angibt. In Responses gibt er das Subprotokoll an, das der Server aus den Präferenzen des Clients ausgewählt hat.
Sec-WebSocket-Extensions-
Ein HTTP-Header, der in Requests die vom Client unterstützten WebSocket-Erweiterungen in bevorzugter Reihenfolge angibt. In Responses gibt er die Erweiterung an, die der Server aus den Präferenzen des Clients ausgewählt hat.
Bibliotheken
- AsyncAPI: Eine Spezifikation zur Beschreibung ereignisgesteuerter Architekturen auf Grundlage von Protokollen wie WebSocket. Damit können Sie WebSocket-basierte APIs beschreiben, ähnlich wie REST-APIs mit der OpenAPI-Spezifikation. Erfahren Sie, warum Sie AsyncAPI mit WebSocket verwenden sollten und wie das geht.
- µWebSockets: Hochgradig skalierbare WebSocket-Server- und -Client-Implementierung für C++11 und Node.js.
- Socket.IO: Ein auf Long Polling und WebSocket basierendes Übertragungsprotokoll eines Drittanbieters für Node.js.
- SocketCluster: Ein auf Skalierbarkeit ausgelegtes Pub/Sub-WebSocket-Framework für Node.js.
- 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 im Hintergrund WebSockets, wenn sie verfügbar sind. Andernfalls greift es nahtlos auf andere Techniken und Technologien zurück, ohne dass sich Ihr Anwendungscode ändern muss.
- Caddy: Ein Webserver, der beliebige Befehle (stdin/stdout) über einen WebSocket weiterleiten kann.
- ws: Eine beliebte WebSocket-Client- und -Serverbibliothek 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 über In-Process-Kommunikation, IPC, TCP, UDP, TIPC, Multicast und WebSocket überträgt.
- WebSocket King: Ein Client-Tool, das bei der Entwicklung, beim Testen und bei der Arbeit mit WebSocket-Servern hilft.
- PHP WebSocket Server: Ein in PHP geschriebener Server, der Verbindungen über WebSockets mit
wss://oderws://sowie normale Sockets überssl://undtcp://verarbeitet. - Django Channels: Eine Django-Bibliothek, die Unterstützung für WebSockets und andere Protokolle hinzufügt, die langlebige asynchrone Verbindungen erfordern.
- (Phoenix) Channels: Skalierbare Echtzeitkommunikation über WebSocket im Elixir-Phoenix-Framework.
- Phoenix LiveView: Interaktive Weberlebnisse in Echtzeit über WebSocket im Elixir-Phoenix-Framework.
- Flask-SocketIO: Ermöglicht Flask-Anwendungen eine bidirektionale Kommunikation mit geringer Latenz zwischen Clients und Server.
- Gorilla WebSocket: Gorilla WebSocket ist eine Go-Implementierung des WebSocket-Protokolls.
Spezifikationen
| Spezifikation |
|---|
| WebSockets> # the-websocket-interface> |