python - 关于基于tornado的websocket服务在本机上调试的问题

 雨天是最美 发布于 2022-10-26 17:43

我启动了一个简单的tornado服务器,代码如下

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.websocket
import json

class 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 了。

    2022-11-12 01:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有