boost异步ws服务器正在检查客户端信息



如何作为用户代理从boost异步web套接字服务器检查客户端信息?

我已检查:https://www.boost.org/doc/libs/develop/libs/beast/example/websocket/server/async/websocket_server_async.cpp

这是我唯一的推荐信。

此处不是websocket上的async_accept

// Accept the websocket handshake
ws_.async_accept(
beast::bind_front_handler(
&session::on_accept,
shared_from_this()));

您可以读取HTTP请求,然后调用第三个重载:

// read upgrade request
http::async_read(ws_.next_layer(), buffer_, upgrade_request_,
beast::bind_front_handler(
&session::on_upgrade,
shared_from_this()));

然后在on_run():之外

http::request<http::string_body> upgrade_request_;
void
on_upgrade(beast::error_code ec, size_t) {
if(ec)
return fail(ec, "upgrade");
// Accept the websocket handshake
ws_.async_accept(
upgrade_request_,
beast::bind_front_handler(&session::on_accept, shared_from_this()));
}

这使您有机会在on_upgrade内部检查升级请求:

void
on_upgrade(beast::error_code ec, size_t) {
if(ec)
return fail(ec, "upgrade");
std::cout << "Upgrade request user-agent: " << upgrade_request_[http::field::user_agent] << "n";
std::cout << "Upgrade request headers: " << upgrade_request_.base() << "n";
std::cout << "Upgrade request body: " << upgrade_request_.body() << "n";
// Accept the websocket handshake
ws_.async_accept(
upgrade_request_,
beast::bind_front_handler(&session::on_accept, shared_from_this()));
}

确实使用wscat作为客户端:

wscat -c "ws://localhost:9797/" -H 'User-agent: Slartibartfast' 

使我们的Beast服务器打印出来:

Upgrade request user-agent: Slartibartfast
Upgrade request headers: GET / HTTP/1.1
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: o6j5v6YeqI4vEJT6AiVTyA==
Connection: Upgrade
Upgrade: websocket
User-agent: Slartibartfast
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Host: localhost:9797

Upgrade request body: 

最新更新