2014-01-22 43 views
1

我在linux上使用reactor.listenTCP運行TCP服務器。Twisted reactor.listenTCP間歇性地無法正常連接

所有工作好幾個小時(或幾天),然後發生一些事情,客戶端可以連接,但他們立即斷開服務器。

我的協議實現中沒有任何命令會斷開連接。 客戶端實現中沒有任何內容會導致此類斷開連接。

服務器間歇性地向使用sendLine(data)在用戶列表中找到的所有用戶發送一些數據。

我想知道如果我的意思是執行一些操作時,客戶端斷開連接,我已經錯過了AMD這導致套接字問題。

class MsgHandler(Protocol): 
    def __init__(self, factory): 
     self.factory = factory 
    def connectionMade(self): 
     self.factory.users.append(self) 
    def connectionLost(self, reason): 
     self.factory.users.remove(self) 
    def dataReceived(self, data): 
     pass 

class outputTcpServerFactory(Factory): 
    def __init__(self, users): 
     self.users = users 
    def buildProtocol(self, addr): 
     return MsgHandler(self) 

class Mainloop(object): 
    def __init__(self): 
     self.users = [] 
     s = reactor.listenTCP(port, outputTcpServerFactory(self.users)) 
     reactor.run() 

--->在別處在主循環類是定期運行代碼:

for client in self.users: 
    client.sendLine(data) 
+0

請附上一個簡單的,自包含的,正確的示例來演示您的問題。這一個不完整。 http://sscce.org/ – Glyph

回答

1

你應該總是enable logging,這樣就可以看到未處理的異常,應用程序遇到。這些通常很明顯地表明爲什麼有些事情被打破

+0

感謝讓 - 保羅 - 我已啓用日誌記錄,並會看到它收益率 – RoyHB