使用C++实现WebSocket:从零构建实时应用

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C++ 中的 WebSocket:构建实时应用程序



在现代网络环境中,用户已经习惯了数据的即时更新:新闻推送、聊天室、在线游戏和股票行情都无需刷新页面即可运行。WebSocket 技术允许在客户端和服务器之间建立持久的双向连接,实现实时数据传输。本文将介绍如何使用 C++(一种强大且高性能的语言,非常适合高负载系统)来实现 WebSocket。



您将了解使用哪些库,如何编写服务器和客户端,并探讨实际示例:从简单的聊天系统到通知系统。本文面向熟悉 C++ 基础和网络编程的开发者。



什么是 WebSocket,为什么在 C++ 中需要它?



WebSocket 是一种基于 TCP 的协议,提供全双工通信。与客户端发送请求并等待响应的 HTTP 不同,WebSocket 允许服务器主动发起数据发送。这使得它对于实时应用程序不可或缺:



  • 聊天和即时通讯 — 消息的即时送达。
  • 在线游戏 — 玩家状态的同步。
  • 金融系统 — 行情和汇率的更新。
  • 物联网和监控 — 传感器数据的流式传输。


选择 C++ 来实现这些任务是因为其高性能、低内存占用以及对网络资源的直接访问。这对于处理数千个并发连接的系统至关重要。



C++ 中用于 WebSocket 的库



从零开始在原始套接字上编写 WebSocket 是一项繁重的任务。幸运的是,有一些经过验证的库可以处理协议实现。



1. Boost.Beast

Boost 生态系统的一部分,基于 ASIO。提供底层控制、异步处理和出色的性能。推荐用于工业级项目。



2. WebSocket++

轻量级库,不依赖于 Boost。支持同步和异步模式。非常适合快速原型开发。



3. uWebSockets

专注于最高速度。用于处理数百万连接的生产环境。需要谨慎管理内存。



在本文中,我们将重点介绍 Boost.Beast,因为它是最平衡的解决方案。



实践:用 C++ 创建 WebSocket 服务器



让我们看一个简单的回声服务器示例,它接受连接并将接收到的消息发回。编译需要安装 Boost 和支持 C++17 的编译器。



步骤 1. 环境准备

安装 Boost(例如,通过 vcpkg 或包管理器)。包含头文件:



#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;


步骤 2. 实现服务器

创建一个异步服务器,它接受一个连接并在循环中处理它:



void do_session(tcp::socket& socket) {    try {        // 从套接字创建 WebSocket 流        websocket::stream<tcp::socket> ws(std::move(socket));        ws.accept(); // 执行握手

std::cout << "WebSocket 连接已建立!" << std::endl;

for (;;) { beast::flat_buffer buffer; ws.read(buffer); // 读取客户端消息 std::string msg = beast::buffers_to_string(buffer.data()); std::cout << "收到: " << msg << std::endl;

博客

书籍推荐