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-beastBeispiel 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 installBeispiel 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 = [ Auch in der Bibliothek
SMS-Versand mit Swift (iOS/macOS): API der MessageUI-Bibliothek
Arbeiten mit Kafka in TypeScript: Die Bibliothek KafkaJS und Beispiele
HTML-Parsing in Node.js: Top-Bibliotheken und Codebeispiele
PDF-Berichterstellung mit C# (.NET) mit QuestPDF
Logging in Go: Überblick über die Standardbibliothek log und Alternativen