如何检测和删除扭曲的死 TCP 连接?

How to detect and remove dead TCP connections in twisted?

我是运行一个扭曲的物联网套接字服务器。后来我发现如果设备是硬件重置的,TCP 连接仍然保留在服务器端。我猜 TCP 连接没有时间断开,因为微控制器已被重置。

由于我只允许一台设备连接,如果TCP连接断开,服务器没有收到断开连接请求,新的连接请求将被拒绝。

是的,我确实在 twisted 中定义了一个超时计时器。但我们认为超时计时器太长,大约 5 分钟。等待5分钟后,设备可以重新连接到服务器。

有什么办法可以解决此类问题吗?到目前为止,我通过 web api 添加了一个用户命令,以触发断开连接到套接字服务器的命令并允许新连接。

但是有更好的主意吗?回拨?

我认为你需要实现心跳,在特定的时间间隔客户端必须发送一些 data/event 到服务器(心跳)。

服务器可以跟踪这些心跳事件并设置超时时间,如果一段时间没有来自客户端的心跳,你可以认为客户端连接现在已经死了,可以使用传输对象的 lossConnection 方法断开客户端。您可以在所有协议 类.

中找到传输对象
transport.loseConnection()

我在实时游戏服务器中使用这个机制。