Twisted ReconnectingClientFactory - автоматическое переподключение или явный вызов connect.connect()?

При использовании Twisted ReconnectingClientFactory и потере соединения нужно ли мне вызывать connect.connect() из метода clientConnectionLost или это происходит автоматически?

Ответ может показаться очевидным, потому что это, в конце концов, ReconnectingClientFactory, но в документации Twisted что-то сказано здесь мне интересно:

«Может быть полезно вызвать connect.connect() — это переподключит».

Формулировка и использование термина «может быть полезным» приводит к вопросу, поскольку документ API для базовой клиентской фабрики говорит то же самое.

Ответ Макса правильный, но после дальнейших исследований я думаю, что ответ «корректора» выглядит следующим образом:

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

Это позволяет вам выполнять специальные действия, требуемые вашим приложением, а затем вызывать фабричный код, чтобы позволить Twisted позаботиться о вызове retry() за вас.


person RoyHB    schedule 16.11.2013    source источник


Ответы (2)


Мой старый ответ был не совсем правильным. Вместо этого сделайте следующее:

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

Это позволяет вам выполнять специальные действия, требуемые вашим приложением, а затем вызывать фабричный код, чтобы позволить Twisted позаботиться о вызове retry() за вас.

person Max    schedule 18.11.2013
comment
См. дополнение к исходному вопросу - person RoyHB; 20.11.2013

Вызов ReconnectingClientFactory.clientConnectionLost(self, Connector, Reason) является правильным решением, поскольку он:

  1. Проверяет 'self.continueTrying' перед вызовом self.retry (что является ключевым, поскольку соединение могло быть потеряно из-за вызова 'stopTrying()'
  2. Устанавливает self.connector в переданный коннектор.
  3. Вызывает self.retry() (который из-за отсутствия переданного соединителя использует self.connector, установленный в # 2).
  4. И если в будущем в реализации ReconnectingClientFactory произойдут изменения, которые потребуют дополнительных действий на пути повторного подключения, они будут обрабатываться автоматически без изменения кода.
person Robert Thille    schedule 22.04.2015