Как установить подпротокол с бустом weboscket

Я хочу использовать подпротокол с boost websocket.

Например, у меня есть адрес сервера websocket, ws://127.0.0.1:5005. Теперь я хочу заменить его на ws://127.0.0.1:5005/order. order - это подпротокол в websocket, который можно использовать в libwebsocket. Я не нахожу ресурсов о подпротоколе с надстройкой.

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
);

Вот способ установить подпротокол для Websocket в Boost:

если версия 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");
}));

else: Нажмите здесь, чтобы узнать больше

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");
});
Другие вопросы по тегам