Der Tornado-Websocket-Handler self.close () schließt die Verbindung, ohne die Methode on_close () auszulösen
Ich bin neu bei (Python, Stackoverflow, Tornado), also bitte hab etwas Geduld :). Korrigieren Sie mich.
Ich arbeite mit Tornado an einer Echtzeit-App. Wenn ich self.close () innerhalb der Websocket-Handler-Klasse aufrufe, wird die on_close-Methode nicht gestartet. Für diese Zeit habe ich einen kleinen Wrapper erstellt, der das Problem behebt und (zum Beispiel) den verbundenen Agenten verwirft (reiner Javascript-WSS-API-Client). korrekt.
Alle Netzwerkprobleme werden verworfen, da mein schlechter Wrapper gut funktioniert und ich in einer LAN-Umgebung bin.
hat jemand das gleiche problem Ich kann nicht ohne Erklärung schlafen.
Wirklich vielen Dank.
## 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 ...