关闭龙卷风中的所有(保持活动)套接字连接?

时间:2014-02-12 06:29:46

标签: python sockets tornado

我正在运行一组龙卷风实例,这些实例处理来自一小组保持活动连接的许多请求。当我取下服务器进行维护时,我想优雅地关闭保持活动请求,这样我就可以关闭服务器了。有没有办法告诉客户“嘿这个插座正在关闭”龙卷风?我环顾四周,self.finish()只是刷新连接。

2 个答案:

答案 0 :(得分:2)

最终,我找到了我需要的那种优雅关闭的解决方案(请注意,这可能与Tornado 3.2一起使用,因为它取决于具有连接的请求并检查{ {1}}属性。最终,没有必要关闭连接,除非它主动发送数据(因此流浪的现有连接并不重要)。

  1. 我在应用程序上设置了一个变量,用于指出应用程序是否正在关闭。
  2. no_keep_alive我检查了这一点,如果我们要关闭,我设置initialize()标头符合RFC,然后设置Connection: close以强制连接关闭之前在请求完成后读取更多数据。
  3. 相对简单 - 看起来像这样:

    self.request.connection.no_keep_alive = True

答案 1 :(得分:1)

finish()此处不适用,因为“保持活动”状态的连接与RequestHandler无关。一般情况下,除了关闭它之外,您无法(或需要)执行保持活动连接,因为浏览器不会侦听响应。

Websockets是另一个故事 - 在这种情况下,您可能希望在关闭之前自己关闭连接(但不必 - 您的客户端应该能够抵御刚刚离开的连接)。