WebSocket en C++ : bibliothèques et applications pratiques

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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


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


Exemple de serveur écho

#include <uwebsoc                    

Recommendations