ReconnectingClientClientFantFactory - Riconnessione automatica o connettore di chiamata esplicitamente. Connect ()?
-
21-12-2019 - |
Domanda
Quando si utilizza una riconnectClittyClient intrecciata e la connessione viene persa, è necessario chiamare il connettore.Connect () dal metodo clientConnectionLost o succede automaticamente?
La risposta potrebbe sembrare ovvia perché è, dopo tutto, la riconnectingclientFactory ma la documentazione contorta dice qualcosa qui che mi ha chiesto:
."Potrebbe essere utile chiamare connettore.Connect () - questo si riconnetterà."
La formulazione e l'uso del termine "possono essere utili" conducono alla domanda poiché l'API DOC per la fabbrica del cliente di base dice la stessa cosa.
La risposta di Max è corretta ma dopo un'ulteriore ricerca, penso che la risposta "correttore" sia di seguito:
def clientConnectionLost(self, connector, reason):
# do stuff here that is unique to your own requirements, then:
ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
.
Ciò consente di fare cose specializzate richieste dalla tua applicazione e quindi chiamare il codice di fabbrica per consentire a Twisted di prendersi cura di richiamare il retry () per te.
Soluzione
La mia vecchia risposta non era completamente corretta.Invece fare questo:
..def clientConnectionLost(self, connector, reason): # do stuff here that is unique to your own requirements, then: ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
Ciò consente di fare cose specializzate richieste dalla tua applicazione e quindi chiamare il codice di fabbrica per consentire attorno a prendersi cura di Calling Retry () per te.
Altri suggerimenti
Chiamare RiconnectINGLIENTFENDFATTORY.ClientConnectionLost (Sé, Connettore, Motivo) è la cosa giusta da fare, come:
- .
- controlla 'self.continuerying' prima di chiamare self.retria (che è chiave, poiché la connessione potrebbe essere stata persa a causa di una chiamata a 'Strutturare ()'
- Imposta self.connector sul connettore passato in.
- chiama self.remby () (che a causa della mancanza di un connettore superato utilizza il set di self.connector in # 2).
- E se ci sono modifiche all'implementazione di riconnectionClientFantFant in futuro che richiederebbero più azioni nel percorso di riconnessione, verranno gestiti automaticamente senza modifiche al codice.