我寫了一個基於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