Tornado websocket-基于事件发送数据
Tornado websocket- send data based on an event
我有一个 python 程序,它会在特定事件(例如 curl 请求)上计算函数值。我需要的是函数执行的那一刻,一些数据需要 posted 到 tornado websocket。我浏览了互联网并找到了有关如何创建 websocket 的示例,但所有这些示例都涵盖了在 websocket 处理程序中调用数据的场景
谁能指导我如何 post 在 websocket 上发送消息。基本上我有龙卷风 API 如果用户执行 curl 请求我想将该消息记录到 websocket
您可以通过创建所有活动 websockets 的注册表并使用它在特定事件上发送消息来实现。
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 很好)将事件传递到所有打开的 websockets。但总体方法是相同的:MQ 将是一个注册表,websockets 在连接时订阅消息(并在关闭时取消订阅)。
我有一个 python 程序,它会在特定事件(例如 curl 请求)上计算函数值。我需要的是函数执行的那一刻,一些数据需要 posted 到 tornado websocket。我浏览了互联网并找到了有关如何创建 websocket 的示例,但所有这些示例都涵盖了在 websocket 处理程序中调用数据的场景
谁能指导我如何 post 在 websocket 上发送消息。基本上我有龙卷风 API 如果用户执行 curl 请求我想将该消息记录到 websocket
您可以通过创建所有活动 websockets 的注册表并使用它在特定事件上发送消息来实现。
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 很好)将事件传递到所有打开的 websockets。但总体方法是相同的:MQ 将是一个注册表,websockets 在连接时订阅消息(并在关闭时取消订阅)。