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() для вас.

2 ответа

Решение

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

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

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

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

  1. Проверяет "self.continueTry" перед вызовом self.retry (что является ключевым, так как соединение может быть потеряно из-за вызова stopTried ())
  2. Устанавливает self.connector для переданного соединителя.
  3. Вызывает self.retry() (который из-за отсутствия переданного соединителя использует self.connector, установленный в #2).
  4. И если в будущем в реализации ReconnectingClientFactory будут внесены изменения, которые потребуют дополнительных действий на пути переподключения, они будут обрабатываться автоматически без изменений кода.
Другие вопросы по тегам