Bibliothèque WebSocket C++ : revue complète et exemples d'utilisation
WebSocket est un protocole de communication bidirectionnelle sur TCP qui établit une connexion permanente entre le client et le serveur. Contrairement à HTTP, WebSocket permet d'envoyer des messages dans les deux sens sans requêtes répétées constantes, ce qui est idéal pour les chats, les jeux en ligne, les cotations boursières et autres applications en temps réel.
En C++, il existe plusieurs bibliothèques matures pour travailler avec WebSocket. Dans cet article, nous examinerons trois options les plus populaires : Boost.Beast, uWebSockets et libwebsockets. Nous analyserons leurs caractéristiques, leur installation et fournirons des exemples de code fonctionnels.
1. Boost.Beast — puissant et standardisé
Boost.Beast est une bibliothèque basée sur Boost.Asio qui implémente les protocoles HTTP et WebSocket. Elle fait partie de Boost (depuis la version 1.66) et constitue la norme de facto pour les projets C++ sérieux.
Installation
# Installation de Boost (Ubuntu/Debian)sudo apt install libboost-all-dev
# Ou compilation depuis les sources avec l'option --with-beastExemple de serveur WebSocket (serveur écho)
#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 << "Reçu : " << msg << std::endl;
ws.text(ws.got_text()); ws.write(buffer.data()); } } } catch (const std::exception& e) { std::cerr << "Erreur : " << e.what() << std::endl; } return 0;}Exemple de client WebSocket
#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("Bonjour, serveur !"))); beast::flat_buffer buffer; ws.read(buffer); std::cout << "Réponse : " << beast::buffers_to_string(buffer.data()) << std::endl;
ws.close(websocket::close_code::normal); } catch (const std::exception& e) { std::cerr << "Erreur : " << e.what() << std::endl; } return 0;}2. uWebSockets — rapide et léger
uWebSockets (µWebSockets) est une bibliothèque haute performance écrite en C++11. Elle utilise sa propre boucle d'événements et prend en charge à la fois HTTP et WebSocket. Elle se distingue par une consommation mémoire minimale et une vitesse de fonctionnement élevée.
Installation
git clone https://github.com/uNetworking/uWebSockets.gitcd uWebSocketsmakesudo make installExemple de serveur écho
#include <uwebsoc Aussi dans la bibliothèque
Travailler avec CSV en PHP : lecture, écriture et traitement des données
Client OAuth pour JavaScript (Node.js) : aperçu et exemples d'utilisation
Spring Boot pour Java : guide complet avec exemples
Traitement d'images en C# : redimensionnement et recadrage avec la bibliothèque ImageSharp