WebSocket vs. MQTT — Transportkanal oder Messaging-Protokoll?
WebSocket und MQTT werden oft verglichen, liegen aber auf verschiedenen Ebenen: WebSocket ist ein bidirektionaler Transportkanal, der per HTTP-Upgrade entsteht und danach rohe Daten in beide Richtungen trägt. MQTT ist ein Messaging-Protokoll mit Topics, QoS und Broker — und kann WebSocket sogar als Unterbau nutzen. Die eigentliche Frage lautet: brauchst du nur einen Kanal oder ein ganzes Nachrichtensystem?
WebSocket
WebSocket hält eine Leitung zwischen Browser und Server dauerhaft offen, damit beide jederzeit senden können.
MQTT
MQTT ist eine schlanke, gemeinsame Sprache, mit der Geräte im Internet der Dinge (IoT) Daten austauschen.
WebSocket
- Norm (Kernprotokoll)
- RFC 6455 der IETF (Internet-Normungsorganisation)
- Standardisiert seit
- 2011
- API-Standard (Browser-Schnittstelle)
- WHATWG Living Standard (Gremium für Web-Standards, löste die frühere W3C-Spezifikation ab)
- Verbindungsart
- Vollduplex (gleichzeitig in beide Richtungen) über eine einzige TCP-Verbindung (Netzwerkverbindung zwischen zwei Rechnern)
- Adress-Schemata
- ws:// (unverschlüsselt), wss:// (per TLS/Verschlüsselung abgesichert)
- Ports
- 80 (ws) und 443 (wss), also die üblichen Web-Ports
MQTT
- Standard
- Offener Standard der Standardisierungsorganisation OASIS; Versionen 3.1.1 (2014) und 5.0 (2019), 3.1.1 auch als ISO-Norm (ISO/IEC 20922)
- Transport
- TCP/IP (die zuverlässige Basisverbindung des Internets); für Browser-Anwendungen zusätzlich über WebSocket (eine Dauerverbindung im Webbrowser)
- Standard-Ports
- 1883 (unverschlüsselt), 8883 (verschlüsselt mit TLS); via WebSocket üblich 80/443
- Einordnung
- Anwendungsebene: MQTT setzt auf bestehende Internetverbindungen auf (Fachjargon: OSI-Schicht 7)
- Topologie
- Sternförmig: alle Clients verbinden sich mit einem zentralen Broker
- QoS-Stufen
- 0 (höchstens einmal), 1 (mindestens einmal), 2 (genau einmal)
// Wofür sie gemacht sind
WebSocket: gut geeignet für
- Für Live-Daten, die der Server von sich aus schicken soll, weil WebSocket genau dafür gebaut ist und der Browser nicht ständig nachfragen muss.
- Für beidseitigen Austausch in Echtzeit, weil beide Seiten über dieselbe offene Leitung jederzeit senden können, auch gleichzeitig (der Fachbegriff dafür ist Vollduplex).
- Für viele kleine, häufige Nachrichten, weil die Daten als schlanke Frames (kleine Datenpakete mit sehr wenig Verpackung drumherum) fliessen und so fast kein unnötiger Ballast mitgeschickt wird.
- Für Anwendungen, die durch Firmen-Schutzsysteme müssen, weil WebSocket über die normalen Web-Zugänge läuft (Ports 80 und 443, dieselben, die auch jede Webseite nutzt) und dort meist ohne Sonderfreigabe durch Firewalls durchkommt.
- Für Web- und App-Oberflächen direkt, weil WebSocket fest in jeden modernen Browser eingebaut ist und keine zusätzliche Software beim Nutzer braucht.
WebSocket: weniger geeignet für
- Für einfache, seltene Abfragen ist WebSocket überdimensioniert, weil das Offenhalten der Leitung unnötig Ressourcen bindet. Hier reicht ein klassischer HTTP- beziehungsweise REST-Aufruf (Anfrage und Antwort über HTTP).
- Für reines Datenabholen ohne Server-Push lohnt sich der Aufwand nicht, weil du die Live-Fähigkeit gar nicht nutzt. Besser ist ein normaler HTTP-Aufruf, bei Bedarf ergänzt um Server-Sent Events (eine einfachere Einweg-Technik, bei der nur der Server sendet).
- Für die Vernetzung von Maschinen in der Fertigung ist WebSocket nicht gedacht, weil es das taktgenaue, garantierte Timing nicht bietet, das Maschinen brauchen (dass ein Signal zum Beispiel verlässlich innerhalb weniger Millisekunden ankommt). Dafür gibt es spezielle Industrie-Protokolle wie PROFINET.
- Für Netze aus sehr vielen Geräten, die nach dem Muster Publish/Subscribe arbeiten, ist WebSocket allein umständlich. Publish/Subscribe funktioniert wie ein Zeitungs-Abo: Ein Sender veröffentlicht zu einem Thema, viele Empfänger, die dieses Thema abonniert haben, bekommen es automatisch. Dafür passt oft MQTT besser (ein schlankes Protokoll für genau diesen Fall), das seinerseits teils über WebSocket transportiert wird.
MQTT: gut geeignet für
- Viele Geräte, kleine Nachrichten: Ein Broker verteilt mühelos Messwerte von Tausenden Sensoren gleichzeitig.
- Schmale Bandbreite: Der Verwaltungsanteil pro Nachricht (Overhead) ist extrem klein, eine komplette Datennachricht kommt mit wenigen Bytes plus Topic-Name aus, ein Bruchteil eines HTTP-Requests.
- Instabile Verbindungen: Quittungsmechanismen (QoS) und die Abschiedsnachricht Last Will fangen Verbindungsabbrüche sauber ab.
- Entkopplung: Sender und Empfänger kennen sich nicht, dadurch lassen sich neue Abonnenten jederzeit ergänzen, ohne die Sender anzufassen.
- Firewall-freundlich: Der Client (so heisst jedes angeschlossene Gerät oder Programm) baut die Verbindung immer selbst nach aussen zum Broker auf. Auf der Geräteseite muss keine Tür in der Firewall (ein sogenannter Port) von aussen geöffnet werden; erreichbar sein muss nur der Broker.
MQTT: weniger geeignet für
- Harte Echtzeit im Maschinentakt: Wenn jede Millisekunde zählt, etwa bei der Steuerung von Maschinenachsen, sind spezialisierte Maschinen-Netzwerke die richtige Wahl (Fachbegriffe: Feldbusse oder Industrial Ethernet, etwa PROFINET und EtherCAT).
- Grosse Dateien: MQTT ist für kurze Meldungen gebaut, für Firmware-Updates, Bilder oder Videos eignet sich ein Dateitransfer über HTTP oder ein spezialisiertes Protokoll besser.
- Klassisches Frage-Antwort-Muster: Wer gezielt eine Antwort auf eine Anfrage braucht, etwa eine App, die auf Knopfdruck Daten abruft, fährt mit HTTP, der gewohnten Web-Technik, meist einfacher.
- Direktverbindungen ohne Infrastruktur: MQTT braucht immer einen Broker, für eine simple Punkt-zu-Punkt-Verbindung zwischen zwei Geräten ist das zu viel des Guten.
// Wann was?
Nimm WebSocket, wenn …
- Nimm WebSocket, wenn Browser und dein eigener Server direkt reden: Live-Updates, Chats, Kollaborations-Features — ein Kanal, dein eigenes Nachrichtenformat, kein Broker.
- Nimm WebSocket, wenn du volle Kontrolle über das Protokoll willst: du definierst Framing und Semantik selbst, ohne Vorgaben zu Topics oder QoS-Stufen.
- Nimm WebSocket bei niedriger Latenz zwischen genau zwei Endpunkten: keine Broker-Zwischenstation, Nachrichten gehen direkt vom Server zum Client und zurück.
- Nimm WebSocket, wenn die Infrastruktur schlank bleiben soll: jeder Webserver-Stack (Node, Go, Python) bringt WebSocket-Support mit, ein zusätzlicher Dienst entfällt.
Nimm MQTT, wenn …
- Nimm MQTT, wenn viele Geräte und mehrere Konsumenten im Spiel sind: der Broker entkoppelt alle Teilnehmer, Publish/Subscribe ersetzt selbstgebaute Verteillogik.
- Nimm MQTT, wenn Zuverlässigkeit definiert sein muss: QoS 1/2, Retained Messages und Last Will bekommst du fertig — über rohem WebSocket müsstest du all das selbst implementieren.
- Nimm MQTT für Geräte ausserhalb des Browsers: Mikrocontroller, Gateways und SPS-nahe Systeme haben MQTT-Clients, aber selten Bedarf an WebSocket pur.
- Nimm MQTT, wenn Sessions Verbindungsabbrüche überleben sollen: persistente Sessions liefern verpasste Nachrichten nach — ein rohes WebSocket vergisst beim Abbruch alles.
Der Vergleich ist eigentlich schief: WebSocket ist die Leitung, MQTT das Nachrichtensystem, das auch durch diese Leitung fliessen kann. Für einen Browser, der mit einem einzelnen Server spricht, ist pures WebSocket der kürzeste Weg. Sobald Geräte, mehrere Konsumenten und Zustellgarantien dazukommen, baust du mit rohem WebSocket nach und nach einen schlechten MQTT-Broker nach — dann nimm gleich das Original.
// Häufige Fragen
Kann MQTT über WebSocket laufen?
Ja, und das ist der Standardweg für Browser: da Webseiten keine rohen TCP-Verbindungen öffnen dürfen, verbinden sich Bibliotheken wie MQTT.js über WebSocket (meist Port 443 mit TLS) zum Broker. Mosquitto, EMQX und HiveMQ bringen WebSocket-Listener mit. So bekommt ein Web-Dashboard dieselben Topics, QoS-Stufen und Retained Messages wie jeder andere MQTT-Client.
Ersetzt WebSocket MQTT — oder umgekehrt?
Nein, sie liegen auf verschiedenen Schichten: WebSocket transportiert Bytes bidirektional, mehr nicht — Themenverteilung, Zustellgarantien und Offline-Handling musst du selbst bauen. MQTT liefert genau diese Messaging-Funktionen, braucht dafür aber einen Broker. Faustregel: ein Client und ein Server ohne Zuverlässigkeits-Anforderungen sprechen WebSocket, alles mit vielen Teilnehmern oder QoS spricht MQTT (gern über WebSocket).
