立即关闭我正在下面一个非常简单的回声的WebSocket服务器:连接上打开
#!/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()
我连接到该用JavaScript如下
var ws = new WebSocket("ws://localhost:80/websocket");
在控制台中我看到
new connection
connection closed
我不明白的是为什么我在控制台中看到connection closed
。客户端还表示连接已关闭,但我没有看到任何好的理由。任何帮助将不胜感激。要复制以admin身份运行python代码,请打开任何JS控制台并输入JS代码。我希望的结果是套接字不能立即关闭。这有点基于我在tornado docs中读到的内容。
编辑更新由open
方法注释掉self.write_message("Hello World")
,连接不紧密。然而,从文档运行示例代码现在会产生一些有趣的内容。
var ws = new WebSocket("ws://localhost:80/websocket");
ws.onopen = function() {
ws.send("Hello, world");
};
ws.onmessage = function (evt) {
alert(evt.data);
};
服务器端输出
new connection
message received Hello, world
connection closed
上有预期的客户端没有相应的警报
新的问题是一样的老这就是为什么服务器说connection closed
?它看起来像self.write_message
可能是罪魁祸首。
我创建了一个[github问题](https://github.com/tornadoweb/tornado/issues/1793),任何有同样问题的人都可以碰到从github复制的 – user25064
- “Windows不是一个完全支持的平台龙卷风,所以你或多或少都会自己调试。“ – user25064