python - 關(guān)于基于tornado的websocket服務(wù)在本機(jī)上調(diào)試的問題
問題描述
我啟動(dòng)了一個(gè)簡單的tornado服務(wù)器,代碼如下
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()
現(xiàn)在的問題是,我分別在edge和chrome瀏覽器中通過localhost:12345訪問的時(shí)候,當(dāng)在某一個(gè)瀏覽器中發(fā)送消息的時(shí)候,想實(shí)現(xiàn)的效果是兩個(gè)頁面都能收到該消息。但實(shí)際的情況是只有發(fā)出消息的瀏覽器頁面會(huì)收到兩個(gè)MessageEvent,請(qǐng)問該如何解決這個(gè)問題?
問題解答
回答1:self.write_message(jsonObject['message'])
意思是,從誰那里收到的消息,就發(fā)給誰。有幾個(gè)人在線發(fā)幾次。
而你需要的是,不管從誰那里收到消息,都給每個(gè)在線的發(fā)一份。誰在線呢?當(dāng)然是正在被迭代的 user 了。
相關(guān)文章:
1. angular.js - angularjs的自定義過濾器如何給文字加顏色?2. javascript - 最終生成的jsBundle文件壓縮問題3. python - TypeError: tryMsgcode() takes exactly 2 arguments (0 given)4. 關(guān)于docker下的nginx壓力測試5. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.6. 關(guān)于Java引用傳遞的一個(gè)困惑?7. android clickablespan獲取選中內(nèi)容8. javascript - canvas 裁剪空白區(qū)域9. 如何分別在Windows下用Winform項(xiàng)模板+C#,在MacOSX下用Cocos Application項(xiàng)目模板+Objective-C實(shí)現(xiàn)一個(gè)制作游戲的空的黑窗口?10. node.js - 如何在服務(wù)器部署vuejs項(xiàng)目?
