gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:29 25 4
gpt4 key购买 nike

我在 python 中有一个 Tornado 网络服务器:

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

关于python - WebSocket 服务器在 python 中定期发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19542333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com