Python&使用Twisted的高速公路:在ReconnectingClientFactory中重置maxRetries

时间:2015-04-04 10:51:35

标签: python twisted autobahn

我正在尝试重新连接客户端,如果出于某种原因使用Python&高速公路扭曲。

使用ReconnectingClientFactory设置有一个很好的示例here但我的问题是围绕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 - 如果可能的话?

谢谢!

科斯塔斯

1 个答案:

答案 0 :(得分:3)

安排协议在成功连接后呼叫ReconnectingClientFactory.resetDelay。这会重置所有内容,以便退避逻辑重新开始。

要求应用程序调用此方法而不是自动重置状态,因为即使TCP连接成功,您仍可能存在值得重试的退出的连接问题。例如,服务器可能会响应您的身份验证尝试,并且太忙,请稍后重试"信息。如果您的协议中可能发生这类事情,那么您应该在{/ 1}} 发生之后将其发送给他们。 resetDelay无法知道这是什么时候。