tworzę połączenie z serwerem tak:Jak mogę sprawdzić, czy instancja twisted.internet.protocol rozłączył
connection = TCP4ClientEndPoint(reactor, server_host, server_port)
factory = Factory()
factory.protocol = Protocol
protocol = yield connection.connect(factory)
protocol.doSomething() # returns a deferred
Teraz w jakiś inny sposób, gdzie mam uchwyt na tym obiekcie protokołu Chcę przetestować, czy protokół nadal jest podłączony, coś w stylu:
if protocol.isConnected():
doSomethingElse()
Czy jest jakikolwiek sposób to zrobić. Przyjrzałem się skręconej dokumentacji i nie mogłem znaleźć odpowiedniej metody. Ustawienie flagi w wywołaniu connectionLost() jest opcją, ale zastanawiałem się, czy mógłbym tego uniknąć.
dzięki! Nie jestem zaznajomiony z praktykami projektowymi ze skręconymi. Według metod cyklu życia, masz na myśli, że powinienem wykonywać całą moją pracę w wywołaniu połączenia connection() i nie powinienem nigdy jawnie wywoływać czegoś takiego jak protocol.doSomething()? – AnkurVj
Tak. Poprzez uruchamianie wszystkich niezbędnych zachowań za pomocą metod wywołań zwrotnych, unikasz konieczności śledzenia stanu (który jest zwykle podatny na błędy), ponieważ po prostu robisz rzeczy, gdy trzeba to zrobić. Zauważ, że jest to ** pożądane **, ale nie zawsze ** możliwe **. Niektóre projekty wymagają tylko takich flag jak powyższe. Staraj się tego unikać, ale nie niszcz swojego kodu, starając się postępować zgodnie z najlepszą praktyką :) – slezica
Rzeczywiście. Było mi bardzo trudno zrobić to wszystko w callbackach! Na przykład musiałem dać obiektowi protokolarnemu kilka dodatkowych zmiennych po połączeniu i zanim to zrobiło, ale nie wiedziałem, jak to zrobić! Musiałem zrobić 'protocol.val = val', a następnie jawnie wywołać' protocol.doSomething() 'zamiast robić' self.doSomething() 'w wywołaniu' connectionMade() 'callback – AnkurVj