一、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连接并通讯上了:

Logo

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

更多推荐