我使用Tornado来提供html文件,同时,我希望我的Python程序通过websockets动态更改同一页面中的值。目的在于可以看到价值的变化,而不需要在客户端刷新。Tornado - 根据需求发送消息给客户端
在这种情况下,我想发送一个消息,其变量每4秒从“1234”变为“4321”。 我有一个线程正在切换值,我希望同一个线程将该值发送到websocket,所以我可以在客户端使用onmessage函数使用脚本处理它。
将下面的代码给我下面的错误:“应用程序”对象有没有属性“write_message”
import tornado.ioloop
import tornado.web
import tornado.websocket
import threading
import time
flag = True
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("mypage.html")
class wshandler(tornado.websocket.WebSocketHandler):
def open(self):
self.write_message('connected')
print "WebSocket opened"
def on_message(self, message):
self.write_message("You have sent: " + message)
def on_close(self):
print "WebSocket closed"
def write_message(self, message):
print ("writing message", message)
self.write_message(message)
application = tornado.web.Application(
handlers=[
(r"/", MainHandler),
(r"/ws", wshandler),
])
def toggle():
global flag
while True:
if flag==True:
print 'now on 1234'
flag = False
application.write_message('1234')
time.sleep(4)
elif flag==False:
flag = True
application.write_message('4321')
print 'Now on 4321'
time.sleep(4)
def main():
global response
valueThread=threading.Thread(target=toggle, name="Toggle Value Thread")
valueThread.setDaemon(True)
valueThread.start()
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
我的问题是,每一个教程/指导我见过约龙卷风仅使用功能write_message在websocket类中的open和onmessage函数中..所以我真的不明白为什么这不起作用。
谢谢。但是现在我该如何在一个线程中使用wshandler.toggle函数来实现一个常量循环呢?使用target = wshandler.toggle创建一个线程会导致一个错误。为什么我仍然需要在其中的“onmessage”函数? –
我只是假设你会在收到类似'切换'之类的消息时开始切换。这个wandndler只做这一项工作或什么? – skyline75489
切换将作为线程启动,并且该线程将在主函数中启动。 我不希望切换到在服务器收到消息后启动。我想切换发送一条未经请求的消息。这只是服务器发送,而不是等待请求。 –