1

我想将子协议与 boost websocket 一起使用。

比如我有一个websocket服务器地址,ws://127.0.0.1:5005。现在我想用 ws://127.0.0.1:5005/order 替换它。“order”是websocket中的子协议,可以在libwebsocket中使用。我没有找到关于带有 boost 的子协议的资源。

4

2 回答 2

0

这是一种在 Boost 中为 Websocket 设置子协议的方法:

如果 Boost 版本 >= 1.7.0,则:单击此处了解更多详细信息

stream<tcp_stream> ws(ioc);
ws.set_option(stream_base::decorator(
[](request_type& req)
{
    // Set the client field on the request
    req.set(boost::beast::http::field::sec_websocket_protocol, "protoo");
    req.set(boost::beast::http::field::sec_websocket_version, "13");
    req.set(boost::beast::http::field::sec_websocket_extensions,
            "xxx");
}));

其他:点击这里了解更多详情

stream<tcp_stream> ws(ioc);
ws.handshake_ex("ws://127.0.0.1:5005", "/",
[](request_type& req)
{
    req.insert(boost::beast::http::field::sec_websocket_protocol, "protoo");
    req.insert(boost::beast::http::field::sec_websocket_version, "13");
    req.insert(boost::beast::http::field::sec_websocket_extensions,
            "xxx");
});
于 2020-10-31T11:26:29.747 回答
0

handshake方法将目标(您描述的子协议)作为选项参数。

根据文档

// Do the websocket handshake in the client role, on the connected stream.
// The implementation only uses the Host parameter to set the HTTP "Host" field,
// it does not perform any DNS lookup. That must be done first, as shown above.

ws.handshake(
    "www.example.com",  // The Host field
    "/order"            // The request-target
);
于 2020-05-29T08:01:18.340 回答