abgeklemmt ich meine Verbindung zu einem Server wie folgt zu erstellen:Wie kann ich überprüfen, ob eine twisted.internet.protocol Instanz
connection = TCP4ClientEndPoint(reactor, server_host, server_port)
factory = Factory()
factory.protocol = Protocol
protocol = yield connection.connect(factory)
protocol.doSomething() # returns a deferred
nun in einem anderen Verfahren, wo ich einen Griff auf diesem Protokoll bezweckt Ich möchte testen, ob das Protokoll noch angeschlossen ist, etwa wie folgt:
if protocol.isConnected():
doSomethingElse()
Gibt es eine Möglichkeit, dies zu tun. Ich schaute auf die verdrehte Dokumentation und konnte keine relevante Methode finden. Das Setzen eines Flags im connectionLost() Callback ist eine Option, aber ich habe mich gefragt, ob ich das vermeiden könnte.
danke! Ich bin nicht sehr vertraut mit den Design-Praktiken mit twisted. Mit Life Cycle-Methoden meinst du, dass ich meine ganze Arbeit im connectionMade() - Callback ausführen sollte und nicht unbedingt etwas wie protocol.doSomething() nennen sollte? – AnkurVj
Ja. Indem Sie das gesamte erforderliche Verhalten von den Callback-Methoden aus ausführen, vermeiden Sie die Notwendigkeit, den Status zu verfolgen (der normalerweise fehleranfällig ist), weil Sie nur dann etwas tun, wenn es erledigt werden muss. Beachten Sie, dass dies ** wünschenswert **, aber nicht immer ** möglich ** ist. Einige Designs benötigen nur Flaggen wie oben. Versuchen Sie es zu vermeiden, aber zerstören Sie nicht Ihre Codebasis in einem Versuch, Best Practice zu folgen :) – slezica
In der Tat. Ich fand es sehr schwierig, all das in den Rückrufen zu tun! Zum Beispiel musste ich dem Protokollobjekt einige zusätzliche Variablen geben, nachdem ich verbunden war und bevor es irgendwas getan hat, aber ich wusste nicht, wie ich das machen sollte! Ich musste 'protocol.val = val' machen und dann explizit' protocol.doSomething() 'aufrufen, anstatt' self.doSomething() 'in' connectionMade() 'callback zu tun. – AnkurVj