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 erhalten, ohne den Server auf eine Antwort abfragen zu müssen.
Die WebSocket API bietet zwei alternative Mechanismen zum Erstellen und Verwenden von Websocket-Verbindungen: die WebSocket-Schnittstelle und die WebSocketStream-Schnittstelle.
- Die
WebSocket-Schnittstelle ist stabil und wird von Browsern und Servern gut unterstützt. Sie unterstützt jedoch keinen backpressure. Infolgedessen können, wenn Nachrichten schneller eintreffen, als die Anwendung sie verarbeiten kann, entweder der Arbeitsspeicher des Geräts durch die Pufferung dieser Nachrichten gefüllt werden, die Anwendung aufgrund einer 100%igen CPU-Auslastung nicht mehr reagieren oder beides eintreten. - Die
WebSocketStream-Schnittstelle ist einePromise-basierte Alternative zuWebSocket. Sie verwendet die Streams API zum Empfangen und Senden von Nachrichten, was bedeutet, dass Socket-Verbindungen automatisch von der Stream-Backpressure profitieren und die Geschwindigkeit des Lesens oder Schreibens regulieren können, um Engpässe in der Anwendung zu vermeiden.WebSocketStreamist jedoch nicht standardisiert und wird zurzeit nur von einer Rendering-Engine unterstützt.
Darüber hinaus wird erwartet, dass die WebTransport API die WebSocket API für viele Anwendungen ersetzt. WebTransport ist eine vielseitige, niedrigschwellige API, die Backpressure und viele andere Funktionen bietet, die weder von WebSocket noch von WebSocketStream unterstützt werden, wie unidirektionale Streams, nicht sequenzielle Lieferung und unzuverlässige Datenübertragung über Datagramme. WebTransport ist komplexer zu verwenden als WebSockets, und die Unterstützung in verschiedenen Browsern ist nicht so verbreitet, erlaubt jedoch die Implementierung anspruchsvoller Lösungen. Falls Standard-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 in Gang zu kommen. Wenn Ihre Anwendung jedoch eine nicht standardmäßige benutzerdefinierte Lösung erfordert, sollten Sie die WebTransport API verwenden.
Hinweis: Wenn eine Seite eine offene WebSocket-Verbindung hat, kann der Browser sie möglicherweise nicht zum bfcache hinzufügen. Es ist daher eine gute Praxis, die Verbindung zu schließen, wenn der Benutzer die Seite beendet hat. Siehe Arbeiten mit dem bfcache.
Schnittstellen
WebSocket-
Die primäre Schnittstelle zum Herstellen einer Verbindung zu einem WebSocket-Server und zum Senden und Empfangen von Daten über die Verbindung.
WebSocketStream-
Promise-basierte Schnittstelle zum Herstellen einer Verbindung zu einem WebSocket-Server; verwendet Streams, um Daten über die Verbindung zu senden und zu empfangen.
CloseEvent-
Das von dem WebSocket-Objekt gesendete Ereignis, wenn die Verbindung geschlossen wird.
MessageEvent-
Das von dem WebSocket-Objekt gesendete Ereignis, wenn vom Server eine Nachricht empfangen wird.
Zugehörige HTTP-Header
Die HTTP-Header werden im WebSocket-Handshake verwendet:
Sec-WebSocket-Key-
Ein HTTP-Anforderungsheader, der ein nonce vom Client enthält. Dies wird im WebSocket-Öffnungshandshake verwendet, um zu überprüfen, dass der Client ausdrücklich beabsichtigt, eine WebSocket-Verbindung zu öffnen. Es wird automatisch vom Browser hinzugefügt.
Sec-WebSocket-Accept-
Ein HTTP-Antwortheader, 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-Keyin der entsprechenden Anforderung berechnet. Sec-WebSocket-Version-
Ein HTTP-Header, der in Anforderungen 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 Anforderungen 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 Anforderungen 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 zum Beschreiben ereignisgesteuerter Architekturen basierend auf Protokollen wie WebSocket. Sie können es verwenden, um auf WebSockets basierende APIs zu beschreiben, genau so wie Sie REST-APIs mit der OpenAPI-Spezifikation beschreiben würden. Erfahren Sie warum Sie in Betracht ziehen sollten, AsyncAPI mit WebSocket zu verwenden 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 Langzeitabfrage/WebSocket basierendes Drittanbieterübertragungsprotokoll 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: Webanwendungs-Framework für Node.js (Beispiel: WebSocket-Chat)
- SignalR: SignalR verwendet WebSockets im Hintergrund, wenn sie verfügbar sind, und fällt auf andere Techniken und Technologien zurück, wenn sie nicht verfügbar sind, während Ihr Anwendungscode gleich bleibt.
- Caddy: Ein Webserver, der in der Lage ist, beliebige Befehle (stdin/stdout) als WebSocket zu proxyen.
- 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: ZeroMQ ist eine eingebettete Netzwerksbibliothek, die Nachrichten zur Laufzeit überträgt, darunter IPC, TCP, UDP, TIPC, Multicast und WebSocket.
- WebSocket King: Ein Client-Tool zur Entwicklung, Prüfung und Arbeit mit WebSocket-Servern.
- PHP WebSocket Server: In PHP geschriebener Server, der Verbindungen über WebSockets
wss://oderws://und normale Sockets überssl://,tcp://handhabt. - Django Channels: Django-Bibliothek, die Unterstützung für WebSockets (und andere Protokolle, die lang laufende asynchrone Verbindungen erfordern) hinzufügt.
- (Phoenix) Channels: Skalierbare Echtzeitkommunikation mit WebSocket im Elixir Phoenix-Framework.
- Phoenix LiveView: Echtzeit-interaktive Web-Erlebnisse über WebSocket im Elixir Phoenix-Framework.
- Flask-SocketIO: Ermöglicht Flask-Anwendungen den Zugriff auf latenzarme bidirektionale Kommunikation zwischen den Clients und dem Server.
- Gorilla WebSocket: Gorilla WebSocket ist eine Go-Implementierung des WebSocket-Protokolls.
Spezifikationen
| Spezifikation |
|---|
| WebSockets> # the-websocket-interface> |