2013-11-16 2 views
2

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

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

«Это может быть полезно для вызова connector.connect() - это снова подключится ».

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

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

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

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

ответ

3

Мой старый ответ был не совсем корректным. Вместо этого:

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

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

+0

См. Дополнение к оригинальному вопросу – RoyHB

1

Вызов ReconnectingClientFactory.clientConnectionLost (самостоятельно, разъем, причина) является правильным, что нужно сделать, как это:

  1. чеков self.continueTrying 'перед вызовом self.retry (который ключ, как соединение может быть потеряно из-за вызова «stopTrying()»
  2. Наборы self.connector к разъему проходил в.
  3. вызовы self.retry() (который из-за отсутствия passed- в разъемом используется self.connector, установленный в # 2).
  4. И если в будущем будут внесены изменения в реализацию ReconnectingClientFactory, что потребует дополнительных действий в пути повторного соединения, они будут обрабатываться автоматически без изменений кода.
Смежные вопросы