WebSocket библиотека C++

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое WebSocket и зачем нужна библиотека на C++?

WebSocket — это протокол связи, обеспечивающий полнодуплексный канал поверх одного TCP-соединения. В отличие от HTTP, он позволяет серверу и клиенту обмениваться данными в реальном времени без постоянных запросов. Для C++ существует несколько библиотек, упрощающих интеграцию WebSocket в приложения. Одна из самых популярных — Boost.Beast (часть Boost C++ Libraries). Она предоставляет низкоуровневый и высокоуровневый API для работы с WebSocket и HTTP.

Как установить Boost.Beast?

Boost.Beast — это header-only библиотека (до версии 1.75) или часть Boost, требующая сборки. Установка:

# Ubuntu / Debian
sudo apt install libboost-all-dev

# macOS (Homebrew)
brew install boost

# Windows (vcpkg)
vcpkg install boost-beast

Для header-only режима достаточно скопировать заголовочные файлы в проект.

Основные функции библиотеки

  • WebSocket клиент и сервер — поддержка как клиентских, так и серверных соединений.
  • Асинхронная работа — интеграция с Boost.Asio для неблокирующего ввода-вывода.
  • Поддержка SSL/TLS — защищённые соединения через Boost.Asio SSL.
  • Фрейминг и контрольные кадры — автоматическая обработка ping/pong, close.
  • HTTP upgrade — встроенная поддержка handshake из HTTP в WebSocket.

Пример кода: простой WebSocket сервер на C++

#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 http = beast::http;
namespace websocket = beast::websocket;
namespace net = boost::asio;
using tcp = net::ip::tcp;

int main() {
    try {
        net::io_context ioc{1};
        tcp::acceptor acceptor{ioc, {tcp::v4(), 8080}};
        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 message = beast::buffers_to_string(buffer.data());
            std::cout << "Received: " << message << std::endl;
            ws.write(beast::buffer("Echo: " + message));
        }
    } catch(std::exception const& e) {
        std::cerr << "Error: " << e.what() << std::endl;
        return 1;
    }
    return 0;
}

Пример создаёт сервер на порту 8080, принимает одно соединение, читает сообщения и отправляет их обратно с префиксом "Echo: ".

Когда использовать WebSocket библиотеку C++?

Библиотека подходит для проектов, где важна производительность и низкая задержка: чаты, онлайн-игры, финансовые торговые системы, мониторинг в реальном времени, IoT-устройства. Если вам нужен надёжный, кроссплатформенный инструмент с активным сообществом, Boost.Beast — лучший выбор для C++.

Рекомендаций