如何向 tornado.websockets 中的所有活动客户端广播消息?

How to broadcast message to all active clients in tornado.websockets?

Tornado implementation of Websocket one needs to use WebSocketHandler a subclass of a RequestHandler for handling communication with websocket clients. Example in the docs 中演示了如何在响应他们的消息时将消息写回客户端,但是文档没有明确说明什么是向没有广播的客户端实施广播的正确方法参与交易(例如所有活跃客户)。

应该如何向 tornado.websocket 中所有活动连接的 websocket 客户端广播消息?我发布了我当前的方法作为答案之一。

我现在使用的解决方案在 中提到过,也在一个聊天示例中使用过。但是,我想了解是否有更好的方法,或者这是否确实应该如何完成。

EDIT1:另一个使用相同方法的相关问题:

我找到的一种方法,但我不确定这是否真的应该这样做,就是将 WebSocketHandler 添加到打开的全局列表中:

active_clients = set()

class Handler(WebSocketHandler):

    def open(self):
        active_clients.add(self)

    def on_message(self, args):
        for client in active_clients:
            client.write_message('msg') # will be written to every client

    def on_close(self):
        active_clients.remove(self)