WebSocket in C++: Echtzeitanwendungen von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

WebSocket in C++: Echtzeitanwendungen von A bis Z



In der modernen Welt der Webtechnologien erwarten Benutzer sofortige Reaktionen von Anwendungen. Das traditionelle HTTP-Protokoll, das nach dem "Anfrage-Antwort"-Schema arbeitet, ist für Aufgaben, die eine ständige Datenaktualisierung erfordern, schlecht geeignet: Online-Chats, Börsenkurse, Mehrspielerspiele und Überwachungssysteme. Hier kommt WebSocket zur Hilfe – ein Protokoll, das eine dauerhafte bidirektionale Verbindung zwischen Client und Server herstellt.



In diesem Artikel werden wir untersuchen, wie man Echtzeitanwendungen in C++ mit WebSocket erstellt. Sie erfahren mehr über Bibliotheken, Architektur und schreiben Ihren ersten funktionierenden Code.



Was ist WebSocket und warum wird es in C++ benötigt?



WebSocket ist ein Protokoll, das eine dauerhafte TCP-Verbindung zwischen Client und Server herstellt. Nach dem Handshake können Daten in beide Richtungen übertragen werden, ohne dass wiederholte HTTP-Anfragen erforderlich sind. Dies reduziert die Latenz und die Netzwerklast drastisch.



C++ ist die ideale Sprache für leistungsstarke Echtzeitsysteme. Es bietet vollständige Kontrolle über Speicher, Threads und Netzwerkoperationen. In Kombination mit WebSocket erhalten Sie:



  • Minimale Latenz – Daten werden in Millisekunden zugestellt.
  • Hohen Durchsatz – Tausende gleichzeitige Verbindungen.
  • Energieeffizienz – geringer Ressourcenverbrauch des Servers.


Anwendungsbeispiele: Börsenterminals, Online-Spiele (z.B. Echtzeit-Schach), Benachrichtigungssysteme, IoT-Geräte und sogar Daten-Streaming von Sensoren.



Bibliotheksauswahl: Boost.Beast vs uWebSockets



In C++ gibt es mehrere beliebte Bibliotheken für die Arbeit mit WebSocket. Wir betrachten zwei Hauptbibliotheken:



Boost.Beast

Dies ist Teil des Boost-Ökosystems, geschrieben in modernem C++11/14/17. Beast bietet eine niedrigschwellige Kontrolle über WebSocket und HTTP. Es ist asynchron, basiert auf Boost.Asio und ist ideal für ernsthafte Projekte.



uWebSockets (µWebSockets)

Eine leichtgewichtige und extrem schnelle Bibliothek. Geschrieben in C++17, ausgerichtet auf maximale Leistung. Ideal für Mikroservices und einfache Echtzeitanwendungen.



Für dieses Tutorial wählen wir Boost.Beast, da es flexibler und für Bildungszwecke besser dokumentiert ist.



Einen WebSocket-Server in C++ mit Boost.Beast schreiben



Lassen Sie uns einen einfachen Echo-Server erstellen, der Nachrichten vom Client empfängt und zurücksendet. Dies ist die Basis für jede Echtzeitanwendung.



Installieren Sie zunächst Boost.Beast und Asio. In den meisten Linux-Distributionen erfolgt dies über den Paketmanager:



sudo apt install libboost-all-dev


Nun der Server-Code:



#include <boost/beast/core.hpp>#include <boost/beast/websocket.hpp>#include <boost/asio/ip/tcp.hpp>#include <iostream>#include <string>#include <thread>

namespace beast = boost::beast;namespace websocket = beast::websocket;namespace net = boost::asio;using tcp = net::ip::tcp;

void do_session(tcp::socket&& socket) { try { websocket::stream<tcp::socket> ws{std::move(socket)}; ws.accept();

for (;;) { beast::flat_buffer buffer; ws.read(buffer); auto msg = beast::buffers_to_string(buffer.data()); std::cout << "Received: " << msg << std::endl;

// Echo-Antwort ws.text(ws.got_text()); ws.write(buffer.data()); } } catch (beast::system_error const& se) { if (se.code() != websocket::error::closed) { std::cerr << "Error: " << se.code().message() << std::endl; } }}

int main() { try {

Blogs

Buchempfehlungen