Twisted ReconnectingClientFactory - 自动重新连接或显式调用connector.connect()?

时间:2013-11-16 04:43:57

标签: twisted twisted.internet twisted.client

当使用Twisted ReconnectingClientFactory并且连接丢失时,我是否需要从clientConnectionLost方法中调用connector.connect(),还是自动完成?

答案可能看起来很明显,因为它毕竟是ReconnectingClientFactory ,但Twisted文档中提到了让我感到疑惑的here

  

“调用connector.connect()可能很有用 - 这将重新连接。”

术语“可能有用”的措辞和用法导致了这个问题,因为基本客户工厂的api doc说的是同样的事情。

Max的回答是正确的,但经过进一步的研究后,我认为'校正'的答案如下:

def clientConnectionLost(self, connector, reason):
    # do stuff here that is unique to your own requirements, then:
    ReconnectingClientFactory.clientConnectionLost(self, connector, reason)

这允许您执行应用程序所需的专门操作,然后调用工厂代码以允许Twisted为您负责调用retry()。

2 个答案:

答案 0 :(得分:3)

我的旧回答并不完全正确。而是这样做:

def clientConnectionLost(self, connector, reason):
    # do stuff here that is unique to your own requirements, then:
    ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
     

这使您可以执行应用程序所需的专门操作   然后调用工厂代码以允许Twisted来处理   为你调用retry()。

答案 1 :(得分:1)

调用ReconnectingClientFactory.clientConnectionLost(self,connector,reason)是正确的做法,因为它:

  1. 在调用self.retry之前检查'self.continueTrying'(这是 密钥,因为连接可能因呼叫而丢失 'stopTrying()'
  2. 将self.connector设置为传入的连接器。
  3. 调用self.retry()(由于缺少传入连接器,因此使用#2中设置的self.connector)。
  4. 如果将来ReconnectingClientFactory实现发生了更改,需要在重新连接路径中执行更多操作,则无需更改代码即可自动处理它们。