Creo il mio collegamento ad un server in questo modo:Come posso verificare se un'istanza twisted.internet.protocol è disconnesso
connection = TCP4ClientEndPoint(reactor, server_host, server_port)
factory = Factory()
factory.protocol = Protocol
protocol = yield connection.connect(factory)
protocol.doSomething() # returns a deferred
Ora, in qualche altro metodo, dove ho una maniglia su questo oggetto protocollo Voglio verificare se il protocollo è ancora connesso, qualcosa del tipo:
if protocol.isConnected():
doSomethingElse()
C'è un modo per farlo. Ho esaminato la documentazione contorta e non ho potuto trovare un metodo pertinente. L'impostazione di un flag nel callback connectionLost() è un'opzione, ma mi chiedevo se avrei potuto evitare di farlo.
grazie! Non ho molta familiarità con le pratiche di progettazione con twistato. Con i metodi del ciclo di vita, vuoi dire che dovrei fare tutto il mio lavoro nel callback connectionMade(), e non dovrei mai chiamare esplicitamente qualcosa come protocol.doSomething()? – AnkurVj
Sì. Eseguendo tutto il comportamento necessario dai metodi di callback, si evita la necessità di tenere traccia dello stato (che di solito è soggetto ad errori) perché basta fare cose quando è necessario. Si noti che questo è ** desiderabile **, ma non sempre ** possibile **. Alcuni progetti hanno solo bisogno di bandiere come sopra. Cerca di evitarlo, ma non distruggere il tuo codebase nel tentativo di seguire le migliori pratiche :) – slezica
Infatti. Stavo trovando molto difficile fare tutto ciò nelle callback! Per esempio dovevo dare all'oggetto protocollo alcune variabili aggiuntive dopo averlo collegato e prima che facesse qualcosa, ma non sapevo come farlo! Ho dovuto fare 'protocol.val = val' e quindi chiamare esplicitamente' protocol.doSomething() 'invece di fare' self.doSomething() 'in' connectionMade() 'callback – AnkurVj