【发布时间】:2020-12-30 08:06:51
【问题描述】:
我尝试运行 Boost-Beast 示例 http_server_async.cpp。它工作得很好(使用一个线程,windows with mingw64,gcc 10.2),但过了一段时间我收到了三条消息:
read: The socket was closed due to a timeout
read: The socket was closed due to a timeout
read: The socket was closed due to a timeout
我猜这是由于超时,在 session::do_read 方法中设置为 30 秒,如果我们将方法 session::on_read 中的条件修改为:
if(ec == http::error::end_of_stream || ec == beast::error::timeout) return do_close();
它应该可以解决问题。但让我担心的是,即使只发送了一个请求(来自 Chrome),我们也有 3 条消息。我检查了 - 是的,根据该请求创建了三个会话。
所以我有几个问题:
- 我们可以在超时时注册一些优雅的关闭而不是转到 on_read 回调吗?
- 为什么一个请求会创建 3 个会话?
【问题讨论】:
标签: boost-beast