2010-11-18 3 views
4

Hat jemand Erfahrung damit? Ich habe eine verdrehte App. Die Clients stellen eine Verbindung zum Server her. Ich habe ein Feature hinzugefügt, dass, wenn ein Client eine Verbindung zu einem Server herstellt, aber bereits ein Client von dieser IP-Adresse ausgeführt wird, die Verbindung zum neuen Client getrennt wird.Twisted erkennt Client nicht getrennt

Gelegentlich habe ich einen Clientcomputer (oder VM, um genau zu sein) heruntergefahren, ohne das Python-Programm manuell auszuschalten. Wenn ich dies ab und zu, aber ziemlich oft mache, erkennt der Server keine Trennung. Wenn der Computer wieder hochfährt und versucht, die Verbindung wiederherzustellen, besteht der Server darauf, dass bereits eine Verbindung von dieser IP-Adresse besteht. Die einzige Lösung, die ich bisher gefunden habe, ist den Server neu zu starten.

Könnte es seltsame Netzwerk-Dinge sein, die die Trennung nicht durchlaufen haben? Twisted Bug?

Ich bin zu 99% sicher, dass es kein Fehler mit meinem Code zum Behandeln von Verbindungsabbrüchen ist. Mein Code ist so eingerichtet, dass connectionLost immer dann aufgerufen wird, wenn eine Verbindung verloren geht, einschließlich der meisten Fälle, in denen ein Computer heruntergefahren wird, und entweder eine Zeichenfolge protokolliert, die trennt, oder eine Ausnahme auslöst, wenn etwas Seltsames passiert. Keines dieser Dinge tauchte im Log auf.

+0

Twisted Framework hat Ereignisse und EventHandler auf allen konzeptionellen Ebenen definiert - Transport/Verbindung, Protokoll usw., um eine Trennung zu behandeln. Eine Überprüfung des Codes würde also helfen. Sie können eine vereinfachte Version des Codes veröffentlichen, der dieses Verhalten aufweist. – pyfunc

+0

@pyfunc: Ich werde den Code umgraben. Ich vermute Netzwerkprobleme für jetzt, weil ich den Client versuchte, die Verbindung wiederherzustellen, und in einigen Fällen konnte es schließlich verbinden (obwohl in anderen Fällen nicht). – Claudiu

Antwort

5

Dies ist ein Twisted FAQ, auch wenn es nicht wirklich etwas hat mit Twisted-spezifisch zu tun.

2

Heh Ich kann nicht glauben, dass ich alles vergessen, dass ich in der Vernetzung Klasse gelernt ...

(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