WebSocket Bibliothek C++: vollständiger Überblick und Anwendungsbeispiele
WebSocket ist ein Protokoll für die Vollduplex-Kommunikation über TCP, das eine dauerhafte Verbindung zwischen Client und Server ermöglicht. Im Gegensatz zu HTTP erlaubt WebSocket das Senden von Nachrichten in beide Richtungen ohne ständige erneute Anfragen, was es ideal für Chats, Online-Spiele, Börsenkurse und andere Echtzeit-Anwendungen macht.
In C++ gibt es mehrere ausgereifte Bibliotheken für die Arbeit mit WebSocket. In diesem Artikel betrachten wir die drei beliebtesten Optionen: Boost.Beast, uWebSockets und libwebsockets. Wir analysieren ihre Funktionen, die Installation und liefern funktionierende Codebeispiele.
1. Boost.Beast – leistungsstark und standardisiert
Boost.Beast ist eine Bibliothek, die auf Boost.Asio basiert und die Protokolle HTTP und WebSocket implementiert. Sie ist Teil von Boost (ab Version 1.66) und gilt als De-facto-Standard für ernsthafte C++-Projekte.
Installation
# Installation von Boost (Ubuntu/Debian)sudo apt install libboost-all-dev
# Oder Kompilierung aus den Quellen mit der Option --with-beastBeispiel eines WebSocket-Servers (Echo-Server)
#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;
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 (;;) { beast::flat_buffer buffer; ws.read(buffer); std::string msg = beast::buffers_to_string(buffer.data()); std::cout << "Empfangen: " << msg << std::endl;
ws.text(ws.got_text()); ws.write(buffer.data()); } } } catch (const std::exception& e) { std::cerr << "Fehler: " << e.what() << std::endl; } return 0;}Beispiel eines WebSocket-Clients
#include <boost/beast/core.hpp>#include <boost/beast/websocket.hpp>#include <boost/asio/connect.hpp>#include <iostream>
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::resolver resolver{ioc}; websocket::stream<tcp::socket> ws{ioc};
auto const results = resolver.resolve("localhost", "8080"); net::connect(ws.next_layer(), results.begin(), results.end()); ws.handshake("localhost", "/");
ws.write(net::buffer(std::string("Hallo, Server!"))); beast::flat_buffer buffer; ws.read(buffer); std::cout << "Antwort: " << beast::buffers_to_string(buffer.data()) << std::endl;
ws.close(websocket::close_code::normal); } catch (const std::exception& e) { std::cerr << "Fehler: " << e.what() << std::endl; } return 0;}2. uWebSockets – schnell und leichtgewichtig
uWebSockets (µWebSockets) ist eine leistungsstarke Bibliothek, die in C++11 geschrieben ist. Sie verwendet eine eigene Ereignisschleife und unterstützt sowohl HTTP als auch WebSocket. Sie zeichnet sich durch minimalen Speicherverbrauch und hohe Geschwindigkeit aus.
Installation
git clone https://github.com/uNetworking/uWebSockets.gitcd uWebSocketsmakesudo make installBeispiel eines Echo-Servers
#include <uwebsoc Auch in der Bibliothek
Caching in Rust: Redis, Memcached und integrierte Lösungen
Überwachung von Go-Anwendungen (Golang): Bibliotheken und Tools
Redis-Client in Rust: Vollständige Anleitung zur Arbeit mit der Bibliothek redis-rs