Linux下编译WebSocket++
一、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 endpointclient 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 ASIOc.init_asio();// Register our message handlerc.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连接并通讯上了:

