Вы можете сделать это, создав реестр всех активных веб-сокетов и использовать его для отправки сообщений об определенном событии.
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) для доставки событий во все открытые веб-сокеты. Но общий подход был бы таким же: MQ - это реестр, а веб-сокеты подписываются на сообщения (и отписываются при закрытии) при подключении.