5
我創建這樣我連接到服務器:我如何檢查是否twisted.internet.protocol實例已經斷開
connection = TCP4ClientEndPoint(reactor, server_host, server_port)
factory = Factory()
factory.protocol = Protocol
protocol = yield connection.connect(factory)
protocol.doSomething() # returns a deferred
現在,在一些其他的方法,在這裏我有這個協議對象的句柄我想測試協議是否仍然連接,如:
if protocol.isConnected():
doSomethingElse()
有沒有什麼辦法可以做到這一點。我看着扭曲的文檔,並找不到相關的方法。在connectionLost()回調中設置一個標誌是一個選項,但我想知道是否可以避免這樣做。
謝謝!我對扭曲的設計實踐不是很熟悉。通過生命週期方法,你的意思是我應該在connectionMade()回調中完成所有工作,並且不需要明確調用類似protocol.doSomething()的東西? – AnkurVj
是的。通過在回調方法中運行所有必要的行爲,您可以避免跟蹤狀態(通常容易出錯),因爲您只需在需要完成的時候執行操作。請注意,這是**可取的**,但並不總是**可能的**。有些設計只需要像上面這樣的標誌。儘量避免它,但不要破壞你的代碼庫,試圖按照最佳做法:) – slezica
的確。我發現很難在回調中做到這一切!例如,我必須在連接之後和協議對象做任何事情之前給協議對象一些額外的變量,但不知道該怎麼做!我必須執行'protocol.val = val',然後顯式調用'protocol.doSomething()'而不是在'connectionMade()'中調用'self.doSomething()'回調 – AnkurVj