WebSocket Server 定期用 python 发送消息



我在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 :Maximum Recursion Depth Exceeded.请帮助我解决此问题。另外,我们如何知道连接到服务器的客户端是什么?

下面是

使用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()

您正在调用该函数而不是启动计时器。这样做:

threading.Timer(10, self.msg, args =('in timer',)).start()

这些例子可以帮助你

龙卷风示例

这也是文档龙卷风WS

相关内容

  • 没有找到相关文章

最新更新