WebSocket服务器在python中定期发送消息

weixin_38056905 2019-09-12 11:44:52
我在python中有一个龙卷风web服务器: import tornado.httpserver import tornado.websocket import tornado.ioloop from tornado.ioloop import IOLoop import tornado.web import time import threading import sys from datetime import datetime from datetime import timedelta def sample(): print 'hiiiii' threading.Timer(10, sample).start() class WSHandler(tornado.websocket.WebSocketHandler): def open(self): print 'new connection' def on_message(self, message): self.write_message(message) self.msg('hellooooooo') print message def msg(self,message): self.write_message(message) threading.Timer(10, self.msg('in timer')).start() print 'in msg'+message def on_close(self): print 'connection closed' application = tornado.web.Application([ (r'/', WSHandler), ]) if __name__ == "__main__": http_server = tornado.httpserver.HTTPServer(application) http_server.listen(8888) interval_ms=120 main_loop=tornado.ioloop.IOLoop.instance() main_loop.start() 而客户是 <html> <head> <script> function fun(){ alert("in fun()"); var val=document.getElementById("txt"); var ws = new WebSocket("ws://localhost:8888"); ws.onopen = function(evt) { alert("Connection open ..."); ws.send(val.value); }; ws.onmessage = function(evt) { alert("from server: "+evt.data); } ws.onclose = function(evt) { alert("Connection closed."); } } </script> </head> <body bgcolor="#FFFFFF"> <input type="text" id="txt" /> <button onClick="fun()">click</button> </body> </html> 我想定期向客户端收到消息.但是当我尝试这个时,我得到了这个错误:RunTimeError:超过最大递归深度.请帮我解决这个问题.另外,我们如何知道连接到服务器的客户端是什么?
...全文
348 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38061608 2019-09-12
  • 打赏
  • 举报
回复
这是使用PeriodicCallback的最小示例. import tornado.httpserver import tornado.websocket import tornado.ioloop from tornado.ioloop import PeriodicCallback import tornado.web class WSHandler(tornado.websocket.WebSocketHandler): def open(self): self.callback = PeriodicCallback(self.send_hello, 120) self.callback.start() def send_hello(self): self.write_message('hello') def on_message(self, message): pass def on_close(self): self.callback.stop() application = tornado.web.Application([ (r'/', WSHandler), ]) if __name__ == "__main__": http_server = tornado.httpserver.HTTPServer(application) http_server.listen(8888) tornado.ioloop.IOLoop.instance().start()

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧