python - 關(guān)于基于tornado的websocket服務(wù)在本機(jī)上調(diào)試的問題
問題描述
我啟動了一個簡單的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)在某一個瀏覽器中發(fā)送消息的時(shí)候,想實(shí)現(xiàn)的效果是兩個頁面都能收到該消息。但實(shí)際的情況是只有發(fā)出消息的瀏覽器頁面會收到兩個MessageEvent,請問該如何解決這個問題?
問題解答
回答1:self.write_message(jsonObject['message'])
意思是,從誰那里收到的消息,就發(fā)給誰。有幾個人在線發(fā)幾次。
而你需要的是,不管從誰那里收到消息,都給每個在線的發(fā)一份。誰在線呢?當(dāng)然是正在被迭代的 user 了。
相關(guān)文章:
1. 運(yùn)行python程序時(shí)出現(xiàn)“應(yīng)用程序發(fā)生異常”的內(nèi)存錯誤?2. spring-mvc - spring-session-redis HttpSessionListener失效3. javascript - QQ第三方登錄的問題4. 在mac下出現(xiàn)了兩個docker環(huán)境5. node.js - mongodb查找子對象的名稱為某個值的對象的方法6. 利用IPMI遠(yuǎn)程安裝centos報(bào)錯!7. 測試自動化html元素選擇器元素ID或DataAttribute [關(guān)閉]8. 正在使用electron和node.js做桌面應(yīng)用,需要實(shí)時(shí)監(jiān)聽是否有網(wǎng)絡(luò)連接,node或者electron是否可以做到9. javascript - 在 model里定義的 引用表模型時(shí),model為undefined。10. java - Spring boot 讀取 放在 jar 包外的,log4j 配置文件,系統(tǒng)有創(chuàng)建日志文件,不寫入日志信息。

網(wǎng)公網(wǎng)安備