如何保持与Heroku的WebSocket连接活着?

时间:2016-12-17 19:20:33

标签: python heroku websocket

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

  • 每50秒发送一次保持活动包 我希望远离此选项并使用它,以防绝对没有其他选项
  • 在WebSocket请求中包含Connection: Keep-Alive标头 由于客户端也是用Python编写的,因此可以在每个请求中包含这样的标头。并且Heroku文档提到这样的标题会阻止dyno打破连接。但事实似乎并非如此 - 我发送了这样的请求,并且在超时后连接仍然关闭。

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

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=

如何保持连接存活?

1 个答案:

答案 0 :(得分:0)

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