2015-04-04 26 views
1

我試圖重新連接客戶端,如果由於某種原因使用Python'連接斷開'&帶Twisted的高速公路。帶有扭曲的Python&Autobahn:在重新連接客戶端工廠中重置maxRetries

有一個很好的例子here使用ReconnectingClientFactory設置,但我的問題是圍繞maxRetries。

在腳本執行過程中,總共允許設置5的方式。

class EchoClientFactory(ReconnectingClientFactory, WebSocketClientFactory): 
    protocol = EchoClientProtocol 
    # http://twistedmatrix.com/documents/current/api/twisted.internet.protocol.ReconnectingClientFactory.html 
    # 
    maxDelay = 10 
    maxRetries = 5 
    def startedConnecting(self, connector): 
     print('Started to connect.') 
    def clientConnectionLost(self, connector, reason): 
     print('Lost connection. Reason: {}'.format(reason)) 
     ReconnectingClientFactory.clientConnectionLost(self, connector, reason) 
    def clientConnectionFailed(self, connector, reason): 
     print('Connection failed. Reason: {}'.format(reason)) 
     ReconnectingClientFactory.clientConnectionFailed(self, connector, reason) 

如果例如存在這樣的問題,並在客戶端連接後2重試然後僅存在3個左和連接成功後的數量並不「復位」。

這是如何實現的,意思是在連接成功後將maxRetries重置爲5,如果可能的話?

謝謝!

科斯塔斯·

回答

3

安排您的協議來調用ReconnectingClientFactory.resetDelay一旦連接成功。這會重置所有內容,以便退避邏輯重新開始。

需要應用程序調用此方法而不是自動重置狀態,因爲即使TCP連接成功,您仍然可能遇到連接問題需要重試退避的問題。例如,服務器可能會響應您的身份驗證嘗試,並顯示「太忙,稍後再試」消息。如果這些事情可能發生在你的協議中,你應該把你的resetDelay調用之後發生的機會已經過去了。 ReconnectingClientFactory不知道這是什麼時候。