关闭Twisted中的非活动连接
问题描述:
我使用LineReceiver协议运行Twisted服务器。有时候客户端会静静地断开连接,所以Twisted会保持连接的打开状态。并且由于服务器除非请求它才会发送任何内容,所以永远不会有TCP超时。换句话说,一些连接永远不会关闭服务器端。关闭Twisted中的非活动连接
我怎样才能扭曲关闭连接数小时无效的连接?
答
您可以使用reactor.callLater
安排定时事件。基于此,有一个助手可以为协议添加超时,twisted.protocols.policies.TimeoutMixin
。
另一种方法是使用TCP保持活动,您可以使用传输的setTcpKeepAlive
方法启用它。
而另一种方法是使用应用程序级保留。基本上偶尔发送一次''noop''。它不需要回应。如果连接丢失,发送缓冲区中的额外数据将最终导致TCP堆栈通知。请参阅FAQ entry。
我们可以将默认超时值更改为另一个值吗? – Andromida 2014-01-07 09:09:07
哪个默认超时?您的操作系统可能允许您在全球范围内配置TCP保持活动,但这可能不是一个好主意。 Twisted的TCP支持不会在TCP本身之上添加任何额外的超时逻辑。如果你想要这样的逻辑,那就是'TimeoutMixin'和'reactor.callLater'的用途。 – 2014-01-07 13:10:39