C++ 语言 WebSocket 服务器开发示例

C++阿木 发布于 2025-06-14 11 次阅读


C++ WebSocket 服务器开发示例

WebSocket 是一种网络通信协议,它允许在单个 TCP 连接上进行全双工通信。在实时应用中,如在线游戏、聊天室、实时数据监控等,WebSocket 的使用越来越普遍。本文将围绕 C++ 语言开发一个简单的 WebSocket 服务器,并展示如何处理客户端连接、消息发送和接收。

环境准备

在开始之前,我们需要准备以下环境:

1. C++ 编译器(如 GCC、Clang 或 Visual Studio)
2. WebSocket 库(如 asio、WebSocket++ 或 libwebsockets)
3. 文本编辑器(如 Visual Studio Code、Sublime Text 或 Vim)

本文将使用 asio 库和 WebSocket++ 库来构建 WebSocket 服务器。

1. 引入必要的库

我们需要在项目中引入 asio 和 WebSocket++ 库。以下是 WebSocket++ 库的引入方式:

cpp
include
include

这里我们使用了 asio_no_tls_client 配置,因为我们不需要使用 TLS 加密。

2. 创建 WebSocket 服务器类

接下来,我们创建一个 WebSocket 服务器类,用于处理客户端连接和消息。

cpp
class WebSocketServer {
public:
WebSocketServer() {
// 初始化 asio 和 WebSocket++ 库
asio::io_context& io = asio::io_context::instance();
server_ = std::make_shared<websocketpp::server>();
server_->init_asio(&io);
server_->set_access_channels(websocketpp::log::alevel::all);
server_->clear_access_channels(websocketpp::log::alevel::frame_payload);
}

void start() {
// 设置服务器地址和端口
server_->set_local_endpoint(websocketpp::uri("ws://localhost:8080"));
// 启动服务器
server_->start();
}

private:
std::shared_ptr<websocketpp::server> server_;
};

3. 处理客户端连接

在 WebSocket 服务器中,我们需要处理客户端连接。以下是处理客户端连接的代码:

cpp
void WebSocketServer::on_open(websocketpp::connection_hdl hdl) {
std::cout << "Client connected." <get_connection(hdl);
// 发送欢迎消息
con->send("Welcome to the WebSocket server!", websocketpp::frame::op_code::text);
}

void WebSocketServer::on_message(websocketpp::connection_hdl hdl, websocketpp::server::message_ptr msg) {
std::cout << "Received message: " <get_payload() <get_connection(hdl);
// 发送回显消息
con->send(msg->get_payload(), websocketpp::frame::op_code::text);
}

void WebSocketServer::on_close(websocketpp::connection_hdl hdl) {
std::cout << "Client disconnected." << std::endl;
}

void WebSocketServer::on_error(websocketpp::connection_hdl hdl, websocketpp::server::error_code ec, std::string msg) {
std::cout << "Error: " << msg << std::endl;
}

4. 启动服务器

我们启动服务器并设置事件处理器:

cpp
int main() {
WebSocketServer server;

// 设置事件处理器
server.server_->set_open_handler(&WebSocketServer::on_open, &server);
server.server_->set_message_handler(&WebSocketServer::on_message, &server);
server.server_->set_close_handler(&WebSocketServer::on_close, &server);
server.server_->set_error_handler(&WebSocketServer::on_error, &server);

// 启动服务器
server.start();

// 运行 asio io_context
asio::io_context::instance().run();

return 0;
}

总结

本文通过使用 asio 和 WebSocket++ 库,展示了如何用 C++ 语言开发一个简单的 WebSocket 服务器。服务器可以处理客户端连接、消息发送和接收。在实际应用中,我们可以根据需求扩展服务器的功能,如添加身份验证、消息加密等。

注意事项

1. 在实际应用中,请确保服务器地址和端口正确配置。
2. 在处理客户端连接和消息时,注意异常处理和资源释放。
3. 如果需要使用 TLS 加密,请选择合适的配置和证书。

希望本文能帮助您了解 C++ WebSocket 服务器开发。祝您编程愉快!