2010-11-18 118 views
4

有没有人有这方面的经验?我有一个扭曲的应用程序。客户端连接到服务器。我添加了一项功能,以便如果客户端连接到服务器,但已经有一个来自该IP地址的客户端正在运行,则会断开新客户端的连接。扭曲不检测客户端断开连接

有一段时间,我没有手动关闭Python程序就关闭了一台客户端计算机(或VM,确切地说)。当我这样做时,偶尔会发现,服务器并没有检测到任何断开连接。当计算机恢复并尝试重新连接时,服务器坚持已经有来自该IP的连接。我迄今为止唯一找到的解决方案是重新启动服务器。

难道这是奇怪的网络事物没有断开连接?扭曲的bug?

我99%肯定这不是我的代码处理断开连接的错误。我的代码被设置为在连接丢失时调用connectionLost,包括大多数关闭计算机的情况,并且它会记录一个字符串,说明断开连接的内容,或者在发生异常时引发异常。这些东西都没有出现在日志中。

+0

扭曲的框架具有在所有概念级别上定义的事件和eventHandler - 传输/连接,协议等来处理断开连接。因此检查代码会有所帮助。您可以发布展示该行为的简化版代码。 – pyfunc 2010-11-18 18:27:33

+0

@pyfunc:我会仔细研究代码。我暂时怀疑网络问题,因为我让客户端不断尝试重新连接,并且在某些情况下,它最终能够连接(尽管在其他情况下不能)。 – Claudiu 2010-11-18 19:01:02

回答

5

这是一个Twisted FAQ,即使它并没有真正有什么关系扭曲的特别。

2

嘿我无法相信我忘了一切,我在网络课堂上所学到...

(2:09:44 PM) coworker: this is the expected behaviour 
(2:10:15 PM) coworker: the server has no way to know if someone dies, or is just quiet 
(2:10:35 PM) coworker: unless ofcourse the server has some kind of ping/keepalive message 
(2:15:38 PM) claudiu: ah so if they have no communicatin 
(2:15:42 PM) claudiu: there's no way to tell that a TCP connection has died 
(2:15:47 PM) claudiu: i remember learning that now, yes.. 
(2:16:23 PM) claudiu: but if i just make the server ping the client then it'll figure out soon enough from lack of ACKs that it's dead, right? 
(2:16:45 PM) coworker: right