同时,我希望我的Python程序通过websockets动态地更改同一个页面中的值。其目的是可以看到值的变化,而无需在客户端刷新。
在这种情况下,我想用一个变量发送一条消息,该变量每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类中的onmessage函数。所以我不太明白为什么这不管用。
发布于 2015-06-01 07:20:03
您应该只使用打开中的函数write_message和websocket类中的onmessage函数。您使用的是application,这是一个tornado.web.Application。它当然不会有tornado.websocket.WebSocketHandler的方法。他们不是同一个班。因此出现了错误。
我会做这样的事情:
class wshandler(tornado.websocket.WebSocketHandler):
def toggle(self):
flag = True
while True:
if flag==True:
print 'now on 1234'
flag = False
self.write_message('1234')
time.sleep(4)
elif flag==False:
flag = True
self.write_message('4321')
print 'Now on 4321'
time.sleep(4)
def on_message(self, message):
if message == 'toggle':
self.toggle()https://stackoverflow.com/questions/30564361
复制相似问题