【问题标题】:How to keep a WebSocket connection to Heroku alive?如何保持与 Heroku 的 WebSocket 连接处于活动状态?
【发布时间】:2017-05-03 07:14:24
【问题描述】:

我在 Heroku 上托管了一个 Python Tornado 应用程序。它为 WebSocket 连接提供服务,我希望它们能够长时间保持活动状态(两个小时)。但是,由于 Heroku 的限制,它 terminates the connection after 55 seconds 自收到最后一个字节以来。
可能的解决方案是:

  • 每 50 秒发送一次保持活动数据包
    我想远离这个选项,并在没有绝对没有其他选项的情况下使用它
  • 在 WebSocket 请求中包含 Connection: Keep-Alive 标头
    由于客户端也是用 Python 编写的,因此有一种方法可以在每个请求中包含这样的标头。 Heroku 文档提到这样的标头会阻止测功机断开连接。但情况似乎并非如此 - 我已经发送了这样一个请求,但在超时后连接仍然关闭。

这里有一些代码供参考。
这是建立连接的客户端部分:

req = HTTPRequest('server_url',
                  headers={'Connection': 'Keep-Alive'})
self.conn = await websocket_connect(req, io_loop = self.ioloop)

这是 Heroku 日志消息:

at=error code=H15 desc="Idle connection" method=GET path="/" 
host='app_url' request_id=some_id fwd="ip_address" 
dyno=web.1 connect=0ms service=55003ms status=503 bytes=

我怎样才能保持连接活跃?

【问题讨论】:

    标签: python heroku websocket


    【解决方案1】:

    in their documentation about Websockets 所述,保持活动数据包确实是 Heroku 上 Websockets 的唯一解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-03
      • 2021-06-11
      • 2018-11-19
      • 2014-08-19
      • 1970-01-01
      • 2021-09-13
      • 2013-08-27
      • 2019-09-01
      相关资源
      最近更新 更多