WebSocket-Bibliothek in C++: Vollständiger Leitfaden zur Auswahl und Verwendung

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-Bibliothek C++: Moderne Werkzeuge für Echtzeitanwendungen



WebSocket ist ein Protokoll, das eine dauerhafte bidirektionale Verbindung zwischen Client und Server über TCP herstellt. Im Gegensatz zu HTTP ermöglicht es die Datenübertragung in Echtzeit ohne ständige Anfragen. Für die Sprache C++ gibt es mehrere leistungsstarke Bibliotheken, die WebSocket implementieren. In diesem Artikel betrachten wir die drei gängigsten: Boost.Beast, uWebSockets und websocketpp, und geben praktische Beispiele für deren Verwendung.



Wozu braucht man eine WebSocket-Bibliothek in C++?



Die Entwicklung von WebSocket von Grund auf ist eine komplexe Aufgabe, die ein tiefes Verständnis des Protokolls, der Verbindungsverwaltung und der Frame-Verarbeitung erfordert. Fertige Bibliotheken bieten:



  • Eine vollständige Implementierung des Protokolls RFC 6455
  • Unterstützung für SSL/TLS-Verschlüsselung
  • Verwaltung mehrerer Verbindungen
  • Verarbeitung fragmentierter Nachrichten
  • Ping/Pong-Mechanismen zur Verbindungsprüfung
  • Asynchrone Architektur für hohe Leistung


Boost.Beast – Industriestandard



Boost.Beast ist eine Bibliothek, die auf Boost.Asio basiert. Sie bietet eine Implementierung der HTTP- und WebSocket-Protokolle. Sie gilt als die zuverlässigste und leistungsstärkste Lösung für C++.



Installation:

# Für Ubuntu/Debian:sudo apt install libboost-all-dev

# Oder über vcpkg:vcpkg install boost-beast


Beispiel eines einfachen WebSocket-Servers:

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

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

int main() { try { net::io_context ioc; tcp::acceptor acceptor(ioc, tcp::endpoint(tcp::v4(), 8080));

while (true) { tcp::socket socket(ioc); acceptor.accept(socket);

websocket::stream<tcp::socket> ws(std::move(socket)); ws.accept();

for (int i = 0; i < 5; ++i) { beast::flat_buffer buffer; ws.read(buffer); std::cout << "Empfangen: " << beast::make_printable(buffer.data()) << std::endl;

std::string response = "Serverantwort: " + std::to_string(i); ws.write(net::buffer(response)); } } } catch (std::exception const& e) { std::cerr << "Fehler: " << e.what() << std::endl; } return 0;}


Besonderheiten:

  • Vollständige Integration mit Boost.Asio (asynchrone Operationen)
  • SSL-Unterstützung von Haus aus
  • Minimale Abstraktionskosten
  • Umfangreiche Dokumentation und Beispiele
  • Wird in Produktionsprojekten verwendet (z. B. in einigen Spielservern)


uWebSockets – leicht und schnell



uWebSockets ist eine in C++17 geschriebene Bibliothek, die sich auf maximale Leistung und minimalen Speicherverbrauch konzentriert. Sie unterstützt sowohl HTTP als auch WebSocket.



Installation:

git clone https://github.com/uNetworking/uWebSockets.gitcd uWebSocketsmakesudo make install


Beispiel eines WebSocket-Servers:

#include <uwebsockets/App.h>#include <iostream>

int main() { uWS::App() .ws("/*", { .open = [](auto* ws) { std::cout << "Client verbunden!" << std::endl; ws->send("Willkommen!", uWS::OpCode::TEXT); }, .message = [

Empfehlungen