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