WebSocket in C++: Erstellung von Echtzeit-Anwendungen von Grund auf

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 auf C++: Echtzeitanwendungen erstellen



Im modernen Web sind Benutzer an sofortige Datenaktualisierungen gewöhnt: Nachrichtenfeeds, Chats, Online-Spiele und Börsenkurse funktionieren ohne Seitenneuladung. Die WebSocket-Technologie ermöglicht eine dauerhafte bidirektionale Verbindung zwischen Client und Server und gewährleistet die Datenübertragung in Echtzeit. In diesem Artikel werden wir uns ansehen, wie man WebSocket in C++ implementiert – einer leistungsstarken und effizienten Sprache, die sich ideal für High-Load-Systeme eignet.



Sie erfahren, welche Bibliotheken verwendet werden, wie man einen Server und Client schreibt, und betrachten praktische Beispiele: von einem einfachen Chat bis zu einem Benachrichtigungssystem. Der Artikel richtet sich an Entwickler, die mit den Grundlagen von C++ und der Netzwerkprogrammierung vertraut sind.



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



WebSocket ist ein Protokoll über TCP, das eine Vollduplex-Kommunikation ermöglicht. Im Gegensatz zu HTTP, bei dem der Client eine Anfrage sendet und auf eine Antwort wartet, erlaubt WebSocket dem Server, eigenständig Daten zu senden. Dies macht es unverzichtbar für Echtzeitanwendungen:



  • Chats und Messenger – sofortige Nachrichtenzustellung.
  • Online-Spiele – Synchronisation des Spielerzustands.
  • Finanzsysteme – Aktualisierung von Kursen und Wechselkursen.
  • IoT und Überwachung – Streaming von Sensordaten.


C++ wird für solche Aufgaben aufgrund seiner hohen Leistung, des geringen Speicherverbrauchs und des direkten Zugriffs auf Netzwerkressourcen gewählt. Dies ist für Systeme mit Tausenden gleichzeitigen Verbindungen entscheidend.



Bibliotheken für die Arbeit mit WebSocket in C++



WebSocket von Grund auf mit rohen Sockets zu schreiben, ist eine aufwändige Aufgabe. Glücklicherweise gibt es bewährte Bibliotheken, die die Implementierung des Protokolls übernehmen.



1. Boost.Beast

Teil des Boost-Ökosystems, basiert auf ASIO. Bietet Low-Level-Kontrolle, asynchrone Verarbeitung und hervorragende Leistung. Empfohlen für industrielle Projekte.



2. WebSocket++

Eine leichtgewichtige Bibliothek, unabhängig von Boost. Unterstützt sowohl synchrone als auch asynchrone Modi. Ideal für schnelles Prototyping.



3. uWebSockets

Fokussiert auf maximale Geschwindigkeit. Wird in der Produktion zur Verarbeitung von Millionen Verbindungen eingesetzt. Erfordert sorgfältige Speicherverwaltung.



In diesem Artikel konzentrieren wir uns auf Boost.Beast als die ausgewogenste Lösung.



Praxis: Erstellen eines WebSocket-Servers in C++



Betrachten wir ein Beispiel eines einfachen Echo-Servers, der Verbindungen annimmt und empfangene Nachrichten zurücksendet. Für die Kompilierung wird ein installiertes Boost und ein Compiler mit C++17-Unterstützung benötigt.



Schritt 1: Umgebungsvorbereitung

Installieren Sie Boost (z. B. über vcpkg oder den Paketmanager). Binden Sie die Header-Dateien ein:



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

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


Schritt 2: Serverimplementierung

Erstellen wir einen asynchronen Server, der eine Verbindung annimmt und in einer Schleife verarbeitet:



void do_session(tcp::socket& socket) {    try {        // Erstellen eines WebSocket-Streams aus dem Socket        websocket::stream<tcp::socket> ws(std::move(socket));        ws.accept(); // Handshake durchführen

std::cout << "WebSocket-Verbindung hergestellt!" << std::endl;

for (;;) { beast::flat_buffer buffer; ws.read(buffer); // Nachricht vom Client lesen std::string msg = beast::buffers_to_string(buffer.data()); std::cout << "Empfangen: " << msg << std::endl;

Blogs

Buchempfehlungen