如何保持与Heroku的WebSocket连接有效?

ill*_*ght 6 python heroku websocket

我在Heroku上托管了一个Python Tornado应用程序。它为WebSocket连接提供服务,我希望它们能够长期存活(两个小时)。但是,由于Heroku的限制,自接收到最后一个字节起55秒后,它将终止连接
可能的解决方案可能是:

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

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

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

这是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=
Run Code Online (Sandbox Code Playgroud)

如何使连接保持活动状态?

Den*_*ehl 0

正如他们关于 Websockets 的文档中所述,保持活动数据包实际上是 Heroku 上 Websockets 的唯一解决方案。