Python 关闭双绞线中的非活动连接

Python 关闭双绞线中的非活动连接,python,twisted,Python,Twisted,我正在用LineReceiver协议运行Twisted服务器。有时客户端会悄悄断开连接,因此Twisted会保持连接打开。而且因为服务器不发送任何东西,除非请求它,所以从来没有TCP超时。换句话说,某些连接在服务器端永远不会关闭 我如何才能关闭一个已停用数小时的连接?您可以使用reactor.callLater计划定时事件。基于此,有一个用于向协议添加超时的助手,twisted.protocols.policies.TimeoutMixin 另一种方法是使用TCP保持有效,您可以使用传输的set

我正在用LineReceiver协议运行Twisted服务器。有时客户端会悄悄断开连接,因此Twisted会保持连接打开。而且因为服务器不发送任何东西,除非请求它,所以从来没有TCP超时。换句话说,某些连接在服务器端永远不会关闭


我如何才能关闭一个已停用数小时的连接?

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

另一种方法是使用TCP保持有效,您可以使用传输的
setTcpKeepAlive
方法启用该方法

另一种方法是使用应用程序级别的keep-alives。本质上是偶尔发送一个“noop”。它不需要回应。如果连接丢失,发送缓冲区中的额外数据将导致TCP堆栈最终注意到


另请参见。

我们可以将默认超时值更改为另一个值吗?哪个默认超时?您的操作系统可能允许您在全局基础上配置TCP keepalive,但处理这个问题可能不是一个好主意。Twisted的TCP支持没有在TCP本身之上添加任何额外的超时逻辑。如果您需要这样的逻辑,这就是
TimeoutMixin
reactor.callLater
的用途。