WebSocket ist ein Kommunikationsprotokoll, das eine persistente, bidirektionale Verbindung zwischen einem Client (typischerweise ein Webbrowser) und einem Server ermoeglicht. Im Gegensatz zum klassischen HTTP-Protokoll, bei dem der Client jede Interaktion mit einer Anfrage initiieren muss, koennen bei WebSocket beide Seiten jederzeit Daten senden.
Das WebSocket-Protokoll wurde 2011 als RFC 6455 standardisiert und ist heute in allen modernen Browsern nativ unterstuetzt. Es ist die Grundlage fuer Echtzeit-Webanwendungen -- von Chat-Systemen ueber Live-Dashboards bis hin zu kollaborativen Editoren.
HTTP vs. WebSocket
Das Problem mit HTTP
HTTP folgt dem Request-Response-Muster:
- Client sendet eine Anfrage
- Server verarbeitet die Anfrage
- Server sendet eine Antwort
- Verbindung wird geschlossen
Fuer Echtzeit-Daten ist dieses Modell ineffizient. Will ein Client wissen, ob neue Nachrichten vorhanden sind, muss er regelmaessig den Server fragen (Polling) -- das erzeugt unnoetige Last und Verzoegerungen.
Die WebSocket-Loesung
| Eigenschaft | HTTP | WebSocket |
|---|---|---|
| Verbindungstyp | Kurzlebig (pro Request) | Persistent (dauerhaft offen) |
| Kommunikationsrichtung | Unidirektional (Client fragt) | Bidirektional (beide senden) |
| Overhead pro Nachricht | Headers bei jeder Anfrage | Minimaler Frame-Header |
| Latenz | Hoch (neue Verbindung noetig) | Niedrig (Verbindung steht) |
| Server-Push | Nicht direkt moeglich | Nativ unterstuetzt |
Wie WebSocket funktioniert
Der Handshake
Die WebSocket-Verbindung beginnt als normaler HTTP-Request mit einem Upgrade-Header:
- Client sendet HTTP-Request mit
Upgrade: websocket - Server akzeptiert mit HTTP 101 (Switching Protocols)
- Ab jetzt kommunizieren beide ueber das WebSocket-Protokoll
- Die Verbindung bleibt offen, bis eine Seite sie schliesst
Nachrichtenaustausch
Nach dem Handshake koennen Client und Server jederzeit Nachrichten senden -- als Text (JSON, Plain Text) oder als Binaerdaten (Bilder, Audio). Jede Nachricht ist ein leichtgewichtiger Frame mit minimalem Overhead.
Verbindungsmanagement
- Ping/Pong: Heartbeat-Mechanismus, der prueft, ob die Verbindung noch aktiv ist
- Close: Ordnungsgemaesses Schliessen der Verbindung mit Statuscode
- Reconnection: Client-seitige Logik fuer automatische Wiederverbindung bei Abbruch
Einsatzszenarien fuer WebSocket
Chat und Messaging
Der klassische Use Case: Nachrichten werden in Echtzeit zwischen Nutzern ausgetauscht. WhatsApp Web, Slack und Discord nutzen WebSockets fuer ihre Echtzeit-Kommunikation.
Live-Dashboards und Monitoring
Dashboards, die Metriken in Echtzeit anzeigen -- Server-Monitoring, Boersen-Ticker, Sportlivescores -- profitieren von der Push-Faehigkeit von WebSocket. Der Server sendet Updates, sobald sich Daten aendern.
Kollaborative Anwendungen
Google Docs, Figma und Miro ermoeglichen gleichzeitiges Arbeiten an Dokumenten. WebSockets uebertragen Aenderungen in Echtzeit an alle Teilnehmer.
Online-Spiele
Multiplayer-Browserspiele benoetigen minimale Latenz fuer die Synchronisation von Spielzustaenden. WebSocket bietet die noetige Geschwindigkeit.
Live-Benachrichtigungen
Push-Benachrichtigungen im Browser, Live-Updates in Social-Media-Feeds und Echtzeit-Benachrichtigungen in Web-Apps basieren haeufig auf WebSocket.
WebSocket-Technologien und Libraries
Server-seitig
- Socket.io: Die populaerste JavaScript-Library fuer WebSocket mit Fallback-Mechanismen
- ws: Leichtgewichtige WebSocket-Implementation fuer Node.js
- Django Channels: WebSocket-Unterstuetzung fuer Python/Django
- SignalR: Microsofts Echtzeit-Library fuer .NET
Client-seitig
Die native WebSocket-API ist in allen modernen Browsern verfuegbar. Libraries wie Socket.io Client oder SockJS bieten zusaetzliche Features wie automatische Reconnection und Fallbacks.
WebSocket-Alternativen
| Technologie | Beschreibung | Wann verwenden |
|---|---|---|
| Server-Sent Events (SSE) | Unidirektionaler Server-Push ueber HTTP | Wenn nur Server an Client senden muss |
| HTTP Long Polling | Client haelt Verbindung offen bis Antwort kommt | Als Fallback, wenn WebSocket nicht verfuegbar |
| WebTransport | Modernes Protokoll ueber HTTP/3 | Fuer Spiele und Low-Latency-Anwendungen (noch jung) |
Performance und Skalierung
WebSocket-Verbindungen sind persistent -- das bedeutet, jeder verbundene Client haelt eine offene Verbindung zum Server. Bei tausenden gleichzeitigen Nutzern kann das zur Herausforderung werden. Load Balancer muessen WebSocket-faehig sein (Sticky Sessions oder Connection-aware Routing), und die Server-Infrastruktur muss auf viele gleichzeitige Verbindungen ausgelegt sein.
WebSocket ist die Technologie der Wahl, wenn Webanwendungen Echtzeit-Kommunikation benoetigen. Fuer klassische Request-Response-Szenarien bleibt HTTP -- insbesondere als REST API -- die einfachere und angemessenere Loesung.