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) является правильным решением, так как он:
- Проверяет "self.continueTry" перед вызовом self.retry (что является ключевым, так как соединение может быть потеряно из-за вызова stopTried ())
- Устанавливает self.connector для переданного соединителя.
- Вызывает self.retry() (который из-за отсутствия переданного соединителя использует self.connector, установленный в #2).
- И если в будущем в реализации ReconnectingClientFactory будут внесены изменения, которые потребуют дополнительных действий на пути переподключения, они будут обрабатываться автоматически без изменений кода.