Autobahn, auf Block verlassen

9

Ich habe einen Websocket Server mit den typischen onX Funktionen in seinem Protokoll. Mein Problem ist, dass ich keinen Weg finde, onX zu beenden, während ich weiter die verschiedenen Sachen mache, die ich machen wollte, als die spezifische Nachricht eintraf. Genauer gesagt, führe ich manchmal in meiner Funktion onMessage eine HTTP-Anfrage an eine API aus, die sehr langsam ist. Daher wird der Client, der die Websocket-Nachricht gesendet hat, durch die onMessage -Finalisierung des Servers blockiert. Selbst wenn ich self.sendMessage oder reactor.callFromThread(<http request here>) oder self.transport.loseConnection() von der Serverseite aus im onMessage -Block verwende, führt% code_de% immer noch die HTTP-Anfrage aus und mein Client wartet.

Dies ist der Code meines Kunden:

%Vor%

Ich habe sogar versucht, nur onMessage , vom Client, aber aus irgendeinem Grund sendet es nicht die Daten (ich sehe nicht, dass sie auf dem Server ankommen). Ich verstehe nicht, wie ich vom Block websocket.send(data) zurückkehren und meine HTTP-Anfrage weitermachen kann.

Und um meine Situation zu erklären, möchte ich einfach 1 ss Websocket-Nachricht an meinen Server senden und sofort die Verbindung schließen. Alles, was das kann, passt zu mir.

    
Crone 08.09.2017, 11:34
quelle

1 Antwort

4

Die Verwendung von reactor.callInThread anstelle von reactor.callFromThread bewirkt, dass der Anwendungsfluss freigegeben wird und die HTTP-Anforderung unabhängig in einem Thread ausgeführt wird. Wie in der verdrehten Dokumentation beschrieben: Ссылка

    
Crone 11.09.2017, 07:19
quelle

Tags und Links