Qt WebSockets Überblick
Qt WebSockets ermöglicht es Ihnen, WebSocket-fähige Anwendungen zu erstellen. Es bietet eine Implementierung für das WebSocket-Protokoll, das von der IETF (Internet Engineering Task Force) als bessere Alternative für die bidirektionale Kommunikation unter Verwendung der bestehenden Web-Infrastruktur angeboten wird.
In der Vergangenheit mussten Webanwendungen, die bidirektionale Kommunikation oder Push-Benachrichtigungen benötigten, eine der verfügbaren HTTP-basierten Lösungen verwenden. Diese Lösungen setzten verschiedene Techniken wie Polling, Long-Polling und Streaming ein, um die Einschränkungen des HTTP-Protokolls zu überwinden, das für solche Anwendungsfälle nicht geeignet ist. Dies führte zu einer hohen Netzwerklatenz, unnötigem Datenaustausch und veralteten Daten. Das WebSocket-Angebot der IETF hilft, diese Probleme weitgehend zu überwinden.
Wie funktioniert es?
Wie Sie in der Abbildung sehen können, besteht eine WebSocket-basierte Lösung aus einer Client- und einer Server-Seite. Die native clientseitige Unterstützung für WebSocket ist in den meisten gängigen Webbrowsern wie Google Chrome, Internet Explorer, Safari usw. verfügbar. Die serverseitige Unterstützung für WebSocket macht es zu einer vollständigen Lösung, die bidirektionale Kommunikation ermöglicht. Jeder Browser mit nativer WebSocket-Unterstützung sollte es Ihnen ermöglichen, eine einfache HTML- und JavaScript-basierte Client-Anwendung unter Verwendung der HTML5 WebSocket-API auszuführen.
Eine WebSocket-Verbindung beginnt mit einem anfänglichen HTTP-kompatiblen Handshake, der die Abwärtskompatibilität gewährleistet, so dass die WebSocket-Verbindungen die Standard-HTTP- (80) und HTTPS-Ports (443) gemeinsam nutzen können. Nach erfolgreichem Handshake ist die Verbindung für den Datenaustausch offen, bis eine der beiden Einheiten die Verbindung beendet.
Das WebSocket-Protokoll verwendet die URL-Schemata ws
: und wss
:, um unsichere bzw. sichere WebSocket-Anfragen darzustellen. Wird während des anfänglichen Handshakes ein Proxy-Server erkannt, versucht das Protokoll, einen Tunnel aufzubauen, indem es eine HTTP CONNECT
-Anweisung an den Proxy ausgibt. Der Tunnelansatz zur Behandlung von Proxys wird unabhängig vom Anfragetyp verwendet, obwohl er bei sicheren Verbindungen mit TLS (Transport Layer Security) nachweislich besser funktioniert.
Typische Anwendungsfälle
WebSocket eignet sich am besten für Szenarien, in denen,
- die dargestellten Daten aktuell sein müssen,
- geringe Netzwerklatenz und minimaler Datenaustausch entscheidend sind.
Einige Beispiele für Anwendungen, bei denen dies mit dem herkömmlichen Ansatz nur schwer zu erreichen ist, sind Instant Messaging, Online-Spiele, Online-Aktienhandel und so weiter.
Die Rolle von Qt WebSockets
Das Modul Qt WebSockets bietet APIs zur Entwicklung von WebSocket-basierten Server- und Client-Anwendungen. Ein Beispiel für den Einsatz dieser APIs ist eine Serveranwendung, die Börsendaten bereitstellt, und eine Client-Anwendung, die sich für Push-Benachrichtigungen registriert, wenn sich der Kurs einiger Aktien ändert.
Das Modul stellt sowohl C++- als auch QML-Versionen der API zur Verfügung, so dass Sie die Alternative wählen können, die Ihren Anforderungen entspricht.
Qt WebSockets mit Cloud-Diensten
Die Client-Anwendung ist in der Regel auf einen externen Dienst angewiesen, um Daten zu erhalten. Die meisten dieser Dienstanbieter unterstützen WebSocket noch nicht, so dass Sie eine WebSocket-fähige Serveranwendung entwickeln müssen, um die Lücke zu schließen. Sie können den Server auf einem unternehmensweiten WebSocket-Gateway-Dienst, z. B. einem Cloud-Dienst, laufen lassen und so den Aufwand für die Wartung der notwendigen Infrastruktur vermeiden, die für das Hosting eines solchen Dienstes erforderlich ist.
Die meisten Cloud-Dienste bieten ein Platform-as-a-Service (PaaS)-Backend, das die Bereitstellung und den Betrieb einer Instanz Ihrer Serveranwendung in der Cloud ermöglicht. Die Client-Anwendungen können sich über eine WebSocket-URL mit dem laufenden Server verbinden und Daten empfangen.
Verwandte Informationen
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.