Python & Autobahn with Twisted:在 ReconnectingClientFactory 中重置 maxRetries

Python & Autobahn with Twisted: reset maxRetries within ReconnectingClientFactory

我正在尝试重新连接客户端,如果由于某种原因连接是 'broken' 使用 Python & Autobahn with Twisted。

有一个很好的例子 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 个并且连接成功后数字不是 'reset'。

如何实现,这意味着在成功连接后将 maxRetries 重置为 5 - 如果可能的话?

谢谢!

科斯塔斯

安排您的协议在成功连接后调用 ReconnectingClientFactory.resetDelay。这会重置所有内容,因此退避逻辑会重新开始。

要求应用程序调用此方法而不是自动重置状态,因为即使 TCP 连接成功,您仍然可能遇到需要退避重试的连接问题。例如,服务器可能会用 "too busy, try again later" 消息响应您的身份验证尝试。如果在您的协议中可能会发生这些事情,您应该在 发生这些事情的可能性已经过去之后 resetDelay 调用 ReconnectingClientFactory不知道什么时候就这样了。