首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >龙卷风-按需向客户发送信息

龙卷风-按需向客户发送信息
EN

Stack Overflow用户
提问于 2015-06-01 01:07:19
回答 1查看 2.7K关注 0票数 1

同时,我希望我的Python程序通过websockets动态地更改同一个页面中的值。其目的是可以看到值的变化,而无需在客户端刷新。

在这种情况下,我想用一个变量发送一条消息,该变量每4秒从"1234“更改为"4321”。我有一个线程在进行值切换,我希望同一个线程将该值发送到websocket,因此我可以使用客户端的onmessage函数使用脚本来处理它。

以下代码将给出以下错误:“应用程序”对象没有属性“write_message”

代码语言:javascript
运行
复制
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函数。所以我不太明白为什么这不管用。

EN

回答 1

Stack Overflow用户

发布于 2015-06-01 07:20:03

您应该只使用打开中的函数write_message和websocket类中的onmessage函数。您使用的是application,这是一个tornado.web.Application。它当然不会有tornado.websocket.WebSocketHandler的方法。他们不是同一个班。因此出现了错误。

我会做这样的事情:

代码语言:javascript
运行
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30564361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档