在Tornado的Websocket实现中,需要使用WebSocketHandler RequestHandler的子类来处理与websocket客户端的通信。 docs中的示例演示了如何在响应消息的过程中将消息写回客户端,但是文档没有说清楚对没有参与消息的客户端实现广播的正确方法是什么。交换(例如对所有活跃的客户)。
如何在tornado.websocket中向所有主动连接的websocket客户端广播消息?我将当前的方法作为答案之一发布。
我现在使用的解决方案在slightly related question中被提及,并且也在一个聊天示例中使用。我想知道是否有更好的方法,或者这个方法确实应该如何完成。
EDIT1:使用相同方法的另一个相关问题:Broadcasting a message using Tornado
答案 0 :(得分:1)
我发现了一种方法,但我不确定这是不是应该如何实现它只是将WebSocketHandler添加到open中的全局列表中:
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)