【问题标题】:Poco C++ Websocket Server - prevent it closing after 60 secondsPoco C++ Websocket Server - 防止它在 60 秒后关闭
【发布时间】:2012-04-10 14:02:27
【问题描述】:

我正在尝试使用 Poco C++ 库的 WebSocket 类在我的服务器应用程序中构建一个干净整洁的接口。

我的问题是使用示例 WebSocket 服务器应用程序,套接字在 60 秒后对客户端关闭 - 我需要它持续更长时间(想想 +15 分钟......)

我尝试将 HTTP 层的超时设置为 10 分钟(3600 秒),这对行为没有影响。

不幸的是,Poco 示例和文档有点薄 - 所以我希望这里有人可以提供帮助。

【问题讨论】:

  • 如果有任何Ping功能要发送给客户端? WebSockets 协议本身具有 PING 和 PONG 操作码。库可能会在一些不活动后断开客户端。
  • 我确实认为可能是这种情况——在这种情况下,我需要找到一种方法来防止这种行为。我计划将 WebSocket 用于移动客户端 - 我想将流量限制在最低限度以节省电池寿命。
  • 同时检查 Poco 中 WebSocket 的 setKeepAlive 函数。还有问题:您是使用浏览器连接到服务器,还是使用 Poco 客户端 WebSocket 的另一个 Poco 应用程序?同样基于文档,Ping 和 Pong 必须由应用程序开发人员处理。所以它不是由图书馆自己处理的。
  • 我也会看看setKeepAlive。

标签: c++ websocket poco-libraries


【解决方案1】:

可以使用设置超时时间

ws.setReceiveTimeout(Poco::Timespan(days, hours, minutes, seconds, microseconds));

how to keep websocket connect until either-side close?

【讨论】:

  • ws.setReceiveTimeout(Poco::Timespan()); 将其设置为无穷大
【解决方案2】:

超时可能是由于线程(池)而不是 WebSocket 本身。您可能希望通过其构造函数设置不同的空闲时间。见http://pocoproject.org/docs/Poco.ThreadPool.html

【讨论】:

    【解决方案3】:

    连接关闭的原因是因为WebSocket是在handler的堆栈上创建的。每个请求都会调用处理程序,并且是短暂的。为了让它持续更长时间,您应该在堆上创建它并在工厂(或其他一些长期存在的对象)中保持对它的引用,以便在处理 HTTP 请求后它仍然存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      相关资源
      最近更新 更多