Reconexión torcidaClentoria: vuelva a conectar automáticamente o llame explícitamente Conector.connect ()?
-
21-12-2019 - |
Pregunta
Cuando se usa una facturación de reconexión torcida y se pierde la conexión ¿Debo llamar a Conector.connect () desde el método cliente connectionlost o que sucede automáticamente?
La respuesta puede parecer obvia porque es, después de todo, el reconectingClientFactory , pero la documentación torcida dice algo aquí que me ha preguntado:
"Puede ser útil llamar a conector.connect (): esto se volverá a conectar".
La redacción y el uso del término 'pueden ser útiles' conduce a la pregunta desde que la API DOC para la fábrica de clientes básicos dice lo mismo.
La respuesta deMax es correcta, pero después de una investigación adicional, creo que la respuesta 'corrector' es la siguiente:
def clientConnectionLost(self, connector, reason):
# do stuff here that is unique to your own requirements, then:
ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
Esto le permite realizar cosas especializadas requeridas por su solicitud y luego llame al código de fábrica para permitir que Twisted se encargue de llamar a Reintentar () para usted.
Solución
Mi vieja respuesta no fue totalmente correcta.En su lugar haz esto:
def clientConnectionLost(self, connector, reason): # do stuff here that is unique to your own requirements, then: ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
Esto le permite realizar cosas especializadas requeridas por su solicitud y luego llame al código de fábrica para permitir que retorse para cuidar llamando a reintentar () para usted.
Otros consejos
Llamar a reconectingClientFactory.clientConnectionLost (yo, conector, razón) es lo correcto que debe hacer, como:
- cheques 'self.continuetying' antes de llamar a uno mismo.retry (que es clave, ya que la conexión puede haberse perdido debido a una llamada a 'STOPTRYSING ()'
- se ajustan a sí mismo. Conector al conector pasado.
- llama a uno mismo. Retry () (que debido a la falta de un conector pasado, utiliza el autodesconécil establecido en el # 2).
- Y si hay cambios en la implementación de reconexiónClientoria en el futuro, lo que requeriría más acciones en la ruta de reconexión, se manejarían automáticamente sin cambios de código.