问题描述
我尝试运行 Boost-Beast 示例 http_server_async.cpp。它运行良好(使用一个线程,带有 mingw64 的 windows,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 条消息。我检查了 - 是的,根据该请求创建了三个会话。
所以我有几个问题:
解决方法
找到了。 Chrome 创建 3 个连接。 Firefox 创建 2 个连接并立即关闭一个。如果我使用 curl 或我自己的客户端运行它,则服务器端只接受一个连接。