标签:python javascript websocket tornado python-3-4
我正在运行一个非常简单的echo 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
我不明白的是为什么我在控制台中看到连接已关闭.客户端还指示连接已关闭,但我没有看到任何正当理由.任何帮助将不胜感激.要复制以管理员身份运行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
客户端没有预期的相应警报
新问题与旧问题相同,这就是为什么服务器说连接已关闭?看起来self.write_message可能是罪魁祸首.
解决方法:
不确定这是否有用,但是我运行了你的代码,它的工作原理与你期望的一样.我没有收到你问题中指出的连接关闭消息,直到我调用ws.close(). (龙卷风4.4.1).
无论问题是什么,它似乎都在您的环境中,而不是您的代码.
标签:python,javascript,websocket,tornado,python-3-4 来源: https://codeday.me/bug/20190711/1430241.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。