python - 关于基于tornado的websocket服务在本机上调试的问题
问题描述
我启动了一个简单的tornado服务器,代码如下
import tornado.httpserverimport tornado.ioloopimport tornado.optionsimport tornado.webimport tornado.websocketimport jsonclass IndexHandler(tornado.web.RequestHandler): def get(self):self.render('index.html')class ChatHandler(tornado.websocket.WebSocketHandler): users = set() def open(self):ChatHandler.users.add(self) def on_message(self, message):jsonObject = json.loads(message)for user in ChatHandler.users: print(user) self.write_message(jsonObject['message']) def on_close(self):ChatHandler.users.remove(self)if __name__ == ’__main__’: app = tornado.web.Application(handlers=[ (r'/', IndexHandler), (r'/ws',ChatHandler)] ) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(12345) tornado.ioloop.IOLoop.instance().start()
现在的问题是,我分别在edge和chrome浏览器中通过localhost:12345访问的时候,当在某一个浏览器中发送消息的时候,想实现的效果是两个页面都能收到该消息。但实际的情况是只有发出消息的浏览器页面会收到两个MessageEvent,请问该如何解决这个问题?
问题解答
回答1:self.write_message(jsonObject['message'])
意思是,从谁那里收到的消息,就发给谁。有几个人在线发几次。
而你需要的是,不管从谁那里收到消息,都给每个在线的发一份。谁在线呢?当然是正在被迭代的 user 了。
相关文章:
1. javascript - gulp-nodemon 使用重启express 服务器的时候端口被占用2. node.js - Angular-webpack-Starter, 怎么把NodeJS添加进项目里?3. android-studio - android studio自带模拟器中的本地“图库”所对应的路径是什么?4. node.js - yo webapp构建项目时报错了,如图5. 求救一下,用新版的phpstudy,数据库过段时间会消失是什么情况?6. python - pymongo 含有子条件的操作 应该怎么写?7. 【python小白】 问关于之初始化一次对象的问题8. thinkphp中Controller里面使用Request::File(’image’);9. python 多进程如何调试10. javascript - 请问一下react-native 布局的时候,尺寸的大小是如何确定的呢?

网公网安备