Linux下编译WebSocket++
WebSocket++是一个基于RFC6455协议的C++头文件库,支持WebSocket客户端和服务器功能。该库提供可互换的网络传输模块,包括基于字符缓冲区、iostreams和Asio的实现。使用前需从GitHub下载源码,在Linux下通过cmake编译安装,编译示例程序需指定Boost库路径。示例中演示了如何修改echo_client.cpp连接WebSocket服务器,并通过WebSoc
一、WebSocket++简介
WebSocket++是一个仅包含头文件的C++库,实现了RFC6455 WebSocket 协议。它允许将 WebSocket客户端和服务器功能集成到C++程序中。该库采用可互换的网络传输模块,包括基于原始字符缓冲区、基于C++ iostreams以及基于Asio(通过Boost或独立实现)的模块。终端用户可根据需要编写额外的传输策略,以支持其他网络或事件库。
其github地址为:https://github.com/zaphoyd/websocketpp
官网地址为:https://www.zaphoyd.com/projects/websocketpp/
文档地址为:https://docs.websocketpp.org/md_tutorials_utility_client_utility_client.html
二、下载编译WebSocket++
首先从github下载WebSocket++源码,拷贝到Linux系统中,解压缩,进入源码目录:

执行cmake,编译,安装:
cmake . -DCMAKE_INSTALL_PREFIX=$(pwd)/install
make
make install
如果没有报错,可以发现WebSocket++源码目录的install目录下会生成WebSocket++的头文件和库文件。examples目录下生成使用示例:

三、WebSocket++例程的单独编译
以单独编译例程中的echo_client为例。WebSocket++依赖boost库,所以单独编译例程时需要指定boost库的头文件和库文件:
g++ echo_client.cpp -o echo_client -g -I/home/ev/source/boost-1.81.0/install/include -I/home/ev/source/websocketpp-0.8.2/install/include -L/home/ev/source/boost-1.81.0/install/lib -lboost_system -lcrypto -lssl
然后编译时需要指定链接库文件:-lcrypto -lssl,否则会报错:

四、WebSocket++例程的使用
微软商店(Microsoft Store)下载WebSocket Debug Tools:

启动WebSocket Debug Tools终端的WebSocket Server:

这里演示echo_client的使用。修改WebSocket++的echo_client例程中的echo_client.cpp,修改要连接的WebSocket Server的地址,即修改变量uri的值:
......
int main(int argc, char* argv[]) {
// Create a client endpoint
client c;
//std::string uri = "ws://localhost:9002";
std::string uri = "ws://192.168.31.108:8050/ws";
if (argc == 2) {
uri = argv[1];
}
try {
// Set logging to be pretty verbose (everything except message payloads)
c.set_access_channels(websocketpp::log::alevel::all);
c.clear_access_channels(websocketpp::log::alevel::frame_payload);
// Initialize ASIO
c.init_asio();
// Register our message handler
c.set_message_handler(bind(&on_message,&c,::_1,::_2));
websocketpp::lib::error_code ec;
client::connection_ptr con = c.get_connection(uri, ec);
if (ec) {
std::cout << "could not create connection because: " << ec.message() << std::endl;
return 0;
}
// Note that connect here only requests a connection. No network messages are
// exchanged until the event loop starts running in the next line.
c.connect(con);
// Start the ASIO io_service run loop
// this will cause a single connection to be made to the server. c.run()
// will exit when this connection is closed.
c.run();
} catch (websocketpp::exception const & e) {
std::cout << e.what() << std::endl;
}
}
重新编译echo_client.cpp,运行,可以看到echo_client和WebSocket Server连接并通讯上了:

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)