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. 我的html頁面一提交,網頁便顯示出了我的php代碼,求問是什么原因?2. tp6表單令牌3. docker 17.03 怎么配置 registry mirror ?4. java 排序的問題5. 我在centos容器里安裝docker,也就是在容器里安裝容器,報錯了?6. django - 后臺返回的json數據經過Base64加密,獲取時用python如何解密~!7. node.js - node 客戶端socket一直報錯Error: read ECONNRESET,用php的socket沒問題哈。。8. 數據庫 - 使用讀寫分離后, MySQL主從復制延遲會導致讀不到數據嗎?9. 老哥們求助啊10. javascript - canvas 可以實現 PS 魔法橡皮擦的功能嗎?
