WebSocket in C++: Bibliotheken und praktische Anwendung

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++: 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-beast


Beispiel 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 install


Beispiel eines Echo-Servers

#include <uwebsoc                    

Empfehlungen