2012-08-11 42 views
1

我使用LineReceiver协议运行Twisted服务器。有时候客户端会静静地断开连接,所以Twisted会保持连接的打开状态。并且由于服务器除非请求它才会发送任何内容,所以永远不会有TCP超时。换句话说,一些连接永远不会关闭服务器端。关闭Twisted中的非活动连接

我怎样才能扭曲关闭连接数小时无效的连接?

回答

2

您可以使用reactor.callLater安排定时事件。基于此,有一个助手可以为协议添加超时,twisted.protocols.policies.TimeoutMixin

另一种方法是使用TCP保持活动,您可以使用传输的setTcpKeepAlive方法启用它。

而另一种方法是使用应用程序级保留。基本上偶尔发送一次''noop''。它不需要回应。如果连接丢失,发送缓冲区中的额外数据将最终导致TCP堆栈通知。请参阅FAQ entry

+0

我们可以将默认超时值更改为另一个值吗? – Andromida 2014-01-07 09:09:07

+0

哪个默认超时?您的操作系统可能允许您在全球范围内配置TCP保持活动,但这可能不是一个好主意。 Twisted的TCP支持不会在TCP本身之上添加任何额外的超时逻辑。如果你想要这样的逻辑,那就是'TimeoutMixin'和'reactor.callLater'的用途。 – 2014-01-07 13:10:39