我是堆叠溢出的新手,因为我经常在这里找到我一直在寻找的东西。但这一次,我不知道如何处理它。我设置了一个龙卷风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方法,但我不确定它是否有用。
我对任何解决方案感到高兴。 非常感谢!
答案 0 :(得分:1)
好吧,我在WebsocketHandler外部使用connections = []
(而不是connections = set()
,因为它可以通过索引访问)。要在列表中打开客户端连接,我使用connections.append(self)
,在关闭connections.remove(self)
时将其删除。
调用方法:
if len(connections) > 0:
connections[0].toggle()