2015-04-04 47 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不知道这是什么时候。