我有一个Python程序,在某些事件(例如,在curl请求上)将计算函数值。我需要的是函数执行的那一刻,一些数据需要发布到龙卷风websocket。我环顾了互联网,发现了有关如何创建websocket的示例,但所有这些示例都涉及在websocket处理程序内部调用数据的场景
有人可以指导我如何在websocket上发布消息。基本上我有龙卷风API,如果用户发出curl请求,我想将该消息记录到websocket
答案 0 :(得分:0)
您可以通过创建所有活动websocket的注册表来完成此操作,并使用它在特定事件上发送消息。
class WebsocketRegistry:
def __init__(self):
self._active_websockets = []
def add_listener(self, listener):
self._active_websockets.append(listener)
def remove_listener(self, listener):
self._active_websockets.remove(listener)
def send_messages(self, msg_txt):
for ws in self._active_websockets:
ws.write_message(msg_txt)
registry = WebsocketRegistry()
class WSHandler(tornado.websocket.WebSocketHandler):
def open(self, *args, **kwargs):
super(WSHandler, self).open(*args, **kwargs)
registry.add_listener(self)
def on_close(self):
super(WSHandler, self).on_close()
registry.remove_listener(self)
P.S。请注意,如果您打算使用2个以上的实例扩展应用程序,则将无法正常工作,并且您将必须使用例如消息队列(RabbitMQ很好)将事件传递到所有打开的WebSocket。但是总体方法是相同的:MQ是一个注册表,Websocket在连接时订阅消息(并在关闭时取消订阅)。