【问题标题】:Close inactive connections in Twisted关闭 Twisted 中的非活动连接
【发布时间】:2012-08-08 08:00:18
【问题描述】:

我正在使用 LineReceiver 协议运行 Twisted 服务器。有时客户端会静默断开连接,因此 Twisted 保持连接打开。并且因为除非请求服务器,否则服务器不会发送任何内容,因此永远不会出现 TCP 超时。换句话说,有些连接永远不会在服务器端关闭。

我怎样才能让 Twisted 关闭几个小时不活动的连接?

【问题讨论】:

    标签: python twisted


    【解决方案1】:

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

    另一种方法是使用 TCP keep-alives,您可以使用传输的 setTcpKeepAlive 方法启用它。

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

    另请参阅FAQ entry

    【讨论】:

    • 我们可以将默认超时值更改为另一个值吗?
    • 哪个默认超时?您的操作系统可能允许您在全局基础上配置 TCP keepalive,但弄乱它可能不是一个好主意。 Twisted 的 TCP 支持不会在 TCP 本身之上添加任何额外的超时逻辑。如果你想要这样的逻辑,那就是 TimeoutMixinreactor.callLater 的用途。
    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多