从另一个类访问tornado websocket类方法

时间:2016-11-16 23:44:14

标签: python websocket tornado

我是堆叠溢出的新手,因为我经常在这里找到我一直在寻找的东西。但这一次,我不知道如何处理它。我设置了一个龙卷风websocket服务器,并希望从另一个类访问websocket线程,但不幸的是,websocket类需要三个不同的参数,并且不能通常的方式访问。

class WebSocketHandler(tornado.websocket.WebSocketHandler):
    def open(self):      
        self.loop()

    def on_message(self, message):
        #do something

    def on_close(self):
        #do something else

    def loop(self):
        pass

    def toggle(self):
        #execute

class EventHandler: 
    def __init__(self):
        self.listener()

    def listener(self):        
        def callback(channel):
            wsHandler = WebSocketHandler()
            wsHandler.toggle()

        GPIO.add_event_detect(channel, GPIO.RISING, callback = callback, bouncetime = 1000)

def main():
    EventHandler()

    application = tornado.web.Application([
        (r"/", WebSocketHandler),
    ])
    server = tornado.httpserver.HTTPServer(application)
    server.listen(8888)
    io_loop = tornado.ioloop.IOLoop.current()
    io_loop.start()

if __name__ == "__main__":
    main()

我有多个类的原因是服务器应该监听输入事件,即使没有连接客户端。但是我必须通过websocket传输输入数据(如果有的话)。我读到了add_callback方法,但我不确定它是否有用。

我对任何解决方案感到高兴。 非常感谢!

1 个答案:

答案 0 :(得分:1)

好吧,我在WebsocketHandler外部使用connections = [](而不是connections = set(),因为它可以通过索引访问)。要在列表中打开客户端连接,我使用connections.append(self),在关闭connections.remove(self)时将其删除。

调用方法:

if len(connections) > 0:
    connections[0].toggle()