我正在使用LineReceiver协议运行Twisted服务器。有时客户端会以静默方式断开连接,因此Twisted会保持连接打开。并且因为除非请求服务器,否则服务器不发送任何内容,因此从不会发生TCP超时。换句话说,某些连接永远不会在服务器端关闭。
如何让Twisted关闭几个小时内一直处于非活动状态的连接?
答案 0 :(得分:2)
您可以使用reactor.callLater
安排定时事件。基于此,有一个助手可以为协议twisted.protocols.policies.TimeoutMixin
添加超时。
另一种方法是使用TCP keep-alives,您可以使用传输的setTcpKeepAlive
方法启用它。
另一种方法是使用应用程序级别的保持活动。基本上偶尔发送一个''noop''。它不需要回复。如果连接丢失,发送缓冲区中的额外数据将导致TCP堆栈最终被注意到。
另请参阅FAQ entry。