【问题标题】:Boost Beast. Three sessions per request?增强野兽。每个请求三个会话?
【发布时间】: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 条消息。我检查了 - 是的,根据该请求创建了三个会话。

所以我有几个问题:

  1. 我们可以在超时时注册一些优雅的关闭而不是转到 on_read 回调吗?
  2. 为什么一个请求会创建 3 个会话?

【问题讨论】:

    标签: boost-beast


    【解决方案1】:

    找到了。 Chrome 创建 3 个连接。 Firefox 创建 2 个连接并立即关闭一个。如果我使用 curl 或我自己的客户端运行它,则服务器端只接受一个连接。

    【讨论】:

      猜你喜欢
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多