1 回答
TA贡献1808条经验 获得超4个赞
您可以通过创建所有活动 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)
PS 请注意,如果您计划使用 2 个以上的实例扩展您的应用程序,这将不起作用,您必须使用例如消息队列(RabbitMQ 很好)将事件传递到所有打开的 websocket。但总体方法是相同的:MQ 将是一个注册表,而 websockets 在连接时订阅消息(并在关闭时取消订阅)。
添加回答
举报