【问题标题】:Twisted unexpected connection lost扭曲的意外连接丢失
【发布时间】:2015-08-09 11:10:35
【问题描述】:

我使用 Python Twisted 编写了一个 TCP 服务器来发送/接收来自客户端的二进制数据。

当客户端关闭他们的应用程序或调用abortConnection 方法时,我正常收到connectionLost 事件,但是当客户端意外断开连接时,我没有收到断开连接事件,因此,我无法删除断开连接队列中的客户端。

意外断开是指禁用网络适配器或以某种方式丢失网络连接。

我的问题是,我该如何处理这种意外的连接丢失?

【问题讨论】:

    标签: python twisted


    【解决方案1】:

    在您的套接字上启用 TCP keepalive 应该可以解决此问题。

    默认情况下这是禁用的,因此如果连接断开,客户端和服务器将永远不会发现连接已死,并简单地假设没有数据包正在发送。 keepalive 将每隔 x 间隔发送一个“心跳”以查看连接是否仍然存在。

    阅读更多内容并在此处查看操作方法:How to use TCP Keepalive with Endpoints in Twisted?

    【讨论】:

    • 非常感谢。但问题是我正在使用 Twisted,我认为我们无法更改 Twisted 中的 keepalive 间隔(至少没有文档)。
    • 该死,我没想到会这样。那么恐怕您将不得不通过向客户端发送数据包并等待响应来创建自己的心跳。
    【解决方案2】:

    支持跨平台意外断开连接(拔出)的唯一方法是实现应用程序级 ping 消息以在特定间隔内 ping 客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 2013-01-11
      相关资源
      最近更新 更多