2010-11-18 102 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 
相關問題