WebSocket em C++: bibliotecas e aplicação prática

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Biblioteca WebSocket C++: revisão completa e exemplos de uso



WebSocket é um protocolo de comunicação full-duplex sobre TCP que estabelece uma conexão permanente entre cliente e servidor. Ao contrário do HTTP, o WebSocket permite enviar mensagens em ambas as direções sem requisições repetidas constantes, sendo ideal para chats, jogos online, cotações de bolsa e outras aplicações em tempo real.



Em C++, existem várias bibliotecas maduras para trabalhar com WebSocket. Neste artigo, analisaremos três das opções mais populares: Boost.Beast, uWebSockets e libwebsockets. Abordaremos suas características, instalação e forneceremos exemplos de código funcionais.



1. Boost.Beast — poderoso e padronizado



Boost.Beast é uma biblioteca baseada no Boost.Asio que implementa os protocolos HTTP e WebSocket. Ela faz parte do Boost (desde a versão 1.66) e é o padrão de facto para projetos sérios em C++.



Instalação

# Instalação do Boost (Ubuntu/Debian)sudo apt install libboost-all-dev

# Ou compilação a partir do código-fonte com a opção --with-beast


Exemplo de servidor WebSocket (servidor eco)

#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 << "Recebido: " << msg << std::endl;

ws.text(ws.got_text()); ws.write(buffer.data()); } } } catch (const std::exception& e) { std::cerr << "Erro: " << e.what() << std::endl; } return 0;}


Exemplo de cliente 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("Olá, servidor!"))); beast::flat_buffer buffer; ws.read(buffer); std::cout << "Resposta: " << beast::buffers_to_string(buffer.data()) << std::endl;

ws.close(websocket::close_code::normal); } catch (const std::exception& e) { std::cerr << "Erro: " << e.what() << std::endl; } return 0;}


2. uWebSockets — rápido e leve



uWebSockets (µWebSockets) é uma biblioteca de alto desempenho escrita em C++11. Ela utiliza seu próprio event loop e suporta tanto HTTP quanto WebSocket. Destaca-se pelo consumo mínimo de memória e alta velocidade de operação.



Instalação

git clone https://github.com/uNetworking/uWebSockets.gitcd uWebSocketsmakesudo make install


Exemplo de servidor eco

#include <uwebsoc                    

Recommendations