我正在运行一组龙卷风实例,这些实例处理来自一小组保持活动连接的许多请求。当我取下服务器进行维护时,我想优雅地关闭保持活动请求,这样我就可以关闭服务器了。有没有办法告诉客户“嘿这个插座正在关闭”龙卷风?我环顾四周,self.finish()
只是刷新连接。
答案 0 :(得分:2)
最终,我找到了我需要的那种优雅关闭的解决方案(请注意,这可能仅与Tornado 3.2一起使用,因为它取决于具有连接的请求并检查{ {1}}属性。最终,没有必要关闭连接,除非它主动发送数据(因此流浪的现有连接并不重要)。
no_keep_alive
我检查了这一点,如果我们要关闭,我设置initialize()
标头符合RFC,然后设置Connection: close
以强制连接关闭之前在请求完成后读取更多数据。相对简单 - 看起来像这样:
self.request.connection.no_keep_alive = True
答案 1 :(得分:1)
finish()
此处不适用,因为“保持活动”状态的连接与RequestHandler
无关。一般情况下,除了关闭它之外,您无法(或需要)执行保持活动连接,因为浏览器不会侦听响应。
Websockets是另一个故事 - 在这种情况下,您可能希望在关闭之前自己关闭连接(但不必 - 您的客户端应该能够抵御刚刚离开的连接)。