Bibliotecas WebSocket C++: visão geral e exemplos de uso

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

Bibliotecas WebSocket para C++: guia completo



WebSocket é um protocolo que fornece comunicação full-duplex entre cliente e servidor sobre uma única conexão TCP. Diferentemente do HTTP, o WebSocket permite que o servidor envie dados ao cliente sem uma solicitação prévia, tornando-o ideal para chats, jogos, cotações de ações e outras aplicações em tempo real. No ecossistema C++, existem várias bibliotecas maduras que implementam este protocolo. Neste artigo, examinaremos as três mais populares: Boost.Beast, uWebSockets e libwebsockets.



1. Boost.Beast (recomendado)



Boost.Beast é uma biblioteca baseada em Boost.Asio que fornece os protocolos HTTP e WebSocket. Ela faz parte da distribuição oficial do Boost (a partir da versão 1.66). Principais vantagens: tipagem forte, suporte completo ao padrão RFC 6455, integração com Asio para operações assíncronas.



Principais recursos:

  • Clientes/servidores WebSocket síncronos e assíncronos
  • Suporte a frames, pings/pongs, fechamento de conexão
  • Operação sobre TLS (via Boost.Asio SSL)
  • Multiplataforma (Linux, Windows, macOS)


Exemplo de servidor WebSocket (assíncrono):

#include <boost/beast/core.hpp>#include <boost/beast/websocket.hpp>#include <boost/asio/ip/tcp.hpp>#include <cstdlib>#include <functional>#include <iostream>#include <string>

namespace beast = boost::beast;namespace websocket = beast::websocket;namespace net = boost::asio;using tcp = net::ip::tcp;

void do_session(tcp::socket& socket) { try { websocket::stream<tcp::socket> ws{std::move(socket)}; ws.accept();

for(;;) { beast::flat_buffer buffer; ws.read(buffer); auto msg = beast::buffers_to_string(buffer.data()); std::cout << "Received: " << msg << std::endl;

// Resposta eco ws.text(ws.got_text()); ws.write(buffer.data()); } } catch(beast::system_error const& se) { if(se.code() != websocket::error::closed) { std::cerr << "Error: " << se.code().message() << std::endl; } }}

int main() { try { net::io_context ioc{1}; tcp::acceptor acceptor{ioc, {tcp::v4(), 8080}};

for(;;) { tcp::socket socket{ioc}; acceptor.accept(socket); std::thread{std::bind(&do_session, std::move(socket))}.detach(); } } catch(std::exception const& e) { std::cerr << "Error: " << e.what() << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS;}


2. uWebSockets (uWS)



uWebSockets é uma biblioteca de alto desempenho focada em velocidade máxima e consumo mínimo de memória. Ela é escrita em C++17 e usa seu próprio event loop (não Boost.Asio). É ideal para microsserviços e aplicações com milhares de conexões simultâneas.



Características principais:

  • Latência muito baixa (~2-3 microssegundos por mensagem)
  • Suporte a WebSocket, HTTP e SSE (Server-Sent Events)
  • Suporte integrado a TLS (via OpenSSL ou BoringSSL)
  • Não requer dependências externas (exceto OpenSSL para TLS)


Exemplo de servidor WebSocket simples:

#include "App.h"

int main() { uWS::App().ws<int>("/*", { .open = [](auto* ws) { std::cout << "Client connected" << std::endl; ws->send("Welcome!", uWS::OpCode::TEXT); }, .message = [](auto* ws, std::string_view message, uWS::OpCode opCode) { std::cout << "Received: " <<

Recommendations