Ich bin wie unten ein sehr einfaches Echo websocket Server ausgeführt wird:Verbindung schließt sofort auf offene
#!/usr/bin/python
import datetime
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
class WSHandler(tornado.websocket.WebSocketHandler):
clients = []
def open(self):
print('new connection')
self.write_message("Hello World")
WSHandler.clients.append(self)
def on_message(self, message):
print('message received %s' % message)
self.write_message('ECHO: ' + message)
def on_close(self):
print('connection closed')
WSHandler.clients.remove(self)
@classmethod
def write_to_clients(cls):
print("Writing to clients")
for client in cls.clients:
client.write_message("Hi there!")
def check_origin(self, origin):
return True
application = tornado.web.Application([
(r'/websocket', WSHandler),
])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(80)
tornado.ioloop.IOLoop.instance().start()
ich verbinden bin daran mit Javascript, wie unten
var ws = new WebSocket("ws://localhost:80/websocket");
in der Konsole sehe ich
new connection
connection closed
Was ich nicht verstehe ist, warum ich die connection closed
in der Konsole sehe. Der Client gibt auch an, dass die Verbindung geschlossen ist, aber ich sehe keinen guten Grund dafür. Jede Hilfe würde sehr geschätzt werden. Um den Python-Code als admin zu replizieren, öffnen Sie eine beliebige JS-Konsole und geben Sie den JS-Code ein. Mein gewünschtes Ergebnis ist, dass die Steckdose nicht sofort geschlossen wird. Dies basiert etwas auf dem, was ich in der tornado docs gelesen habe.
bearbeiten Update von self.write_message("Hello World")
im open
Verfahren auszukommen, funktioniert die Verbindung nicht geschlossen. Das Ausführen des Beispielcodes aus den Dokumenten liefert jedoch etwas Interessantes.
var ws = new WebSocket("ws://localhost:80/websocket");
ws.onopen = function() {
ws.send("Hello, world");
};
ws.onmessage = function (evt) {
alert(evt.data);
};
Server-Seite ausgegeben wird
new connection
message received Hello, world
connection closed
Es gibt keine entsprechende Warnung, wie auf der Client-Seite erwartet
Die neue Frage ist das gleiche wie die alten weshalb der Server connection closed
sagen ? Es sieht so aus, als ob self.write_message
der Schuldige sein könnte.
Ich habe ein [github Problem] (https://github.com/tornadoweb/tornado/issues/1793) erstellt, dass jeder mit dem gleichen Problem – user25064
von github kopiert stoßen kann - "Windows ist keine vollständig unterstützte Plattform für Tornado, also bist du mehr oder weniger damit beschäftigt, das zu debuggen. " – user25064