Tornado websocket handler, self.close () zamyka połączenie bez uruchamiania metody on_close ()
im new at (python, stackoverflow, tornado), więc proszę, bądź cierpliwy :). Popraw mnie.
Pracuję z tornadem w aplikacji czasu rzeczywistego. Kiedy wywołam self.close () wewnątrz klasy obsługi Websocket, metoda on_close nie jest uruchamiana, tym razem zrobiłem mały wrapper, naprawiłem problem i (na przykład) odrzuciłem tego połączonego agenta (czysty avascript wss api client) poprawnie.
Wszystkie problemy z siecią są odrzucane, ponieważ mój biedny wrapper działa dobrze i znajduje się w środowisku LAN.
czy ktoś ma ten sam problem? Nie mogę spać bez wyjaśnienia.
DZIĘKUJĘ, naprawdę.
## imports and other stuff
AGENTS = set()
class BackofficeWSSRailMain(tornado.websocket.WebSocketHandler):
def on_open(self):
pass
def on_message(self,raw_message):
json_msg=json.loads(raw_message)
login = function_that_process_login(json_msg)
if login == True:
AGENTS.add(self)
self.write_message("ok")
else:
self.write_message("nologin")
self.close() ### this part should fireup
### the on_close method but nothing
### happens so AGENT is not discarded.
### here is when i actually call on_close_wrapper(),
### the method below.
def on_close_wrapper(self):
self.close() ### this is my actual solution ,
### waiting for more research.
self.on_close()
def on_close(self):
AGENTS.discard(self)
## Calling ioloop ...