我写了一个基于Twisted的服务器,而且我遇到了一个问题,有些客户端连接不够优雅。例如,用户拔出网线。如何检测Linux上扭曲的非正常断开连接?
有一段时间,Windows上的客户端断开连接(connectionLost被调用,并且它也被写入Twisted中)。而在Linux服务器端,我的连接失败永远不会被触发。即使它试图在连接丢失时将数据写入客户端。为什么Twisted在Linux上无法检测到这些非优雅的断开连接(甚至是将数据写入客户端)?如何使扭曲检测非优雅断线?由于Twisted功能无法检测到非优雅,我的服务器上有很多僵尸用户。
---- ----更新
我想这可能是类Unix系统的插座的功能,所以,什么是插座上的行为类似于Unix的处理情况也是这样吗?
谢谢。 Victor Lin。
你能解释一下callLater如何用来检测断开连接吗? – 2010-11-30 20:22:34
它不会“检测”断开连接。您可以使用它来实施策略,在TCP断开虚拟电路之前,您可以任意决定连接不再可用。您可以说,如果您在发送消息后的10秒内没有收到任何回复,则说明连接已中止。 callLater只让你有能力在10秒后运行一个函数。如果你用这种方式处理问题,那么你会编写一个调用'loseConnection'并使用'c = reactor.callLater(10,thatFunction)'的函数。当你接收到数据时,你会'c.cancel()'。 – 2010-12-02 03:11:38