扭曲的意外连接丢失
Twisted unexpected connection lost
我使用 Python Twisted to send/receive 来自客户端的二进制数据编写了一个 TCP 服务器。
当客户端关闭他们的应用程序或调用 abortConnection
方法时,我通常会收到 connectionLost
事件,但是当客户端意外断开连接时,我不会收到断开连接事件,因此,我无法从队列中删除断开连接的客户端。
意外断开连接是指禁用网络适配器或以某种方式丢失网络连接。
我的问题是,我该如何处理这种意外的连接丢失?
在您的套接字上启用 TCP keepalive 应该可以解决这个问题。
默认情况下这是禁用的,因此如果连接断开,客户端和服务器将永远不会发现连接已断开,并简单地假设没有数据包正在发送。 keepalive 将发送 'heartbeat' 每个 x 间隔以查看连接是否仍然存在。
在此处阅读更多内容并查看操作方法:How to use TCP Keepalive with Endpoints in Twisted?
支持跨平台意外断开连接(拔出)的唯一方法是实现应用程序级 ping 消息以在特定时间间隔内 ping 客户端。
我使用 Python Twisted to send/receive 来自客户端的二进制数据编写了一个 TCP 服务器。
当客户端关闭他们的应用程序或调用 abortConnection
方法时,我通常会收到 connectionLost
事件,但是当客户端意外断开连接时,我不会收到断开连接事件,因此,我无法从队列中删除断开连接的客户端。
意外断开连接是指禁用网络适配器或以某种方式丢失网络连接。
我的问题是,我该如何处理这种意外的连接丢失?
在您的套接字上启用 TCP keepalive 应该可以解决这个问题。
默认情况下这是禁用的,因此如果连接断开,客户端和服务器将永远不会发现连接已断开,并简单地假设没有数据包正在发送。 keepalive 将发送 'heartbeat' 每个 x 间隔以查看连接是否仍然存在。
在此处阅读更多内容并查看操作方法:How to use TCP Keepalive with Endpoints in Twisted?
支持跨平台意外断开连接(拔出)的唯一方法是实现应用程序级 ping 消息以在特定时间间隔内 ping 客户端。