没有收到龙卷风Websocket消息

时间:2018-06-22 06:49:12

标签: python websocket tornado

受这个问题启发,我有一个非常简单的设置:Tornado - Listen to multiple clients simultaneously over websockets

基本上,我有一个Websocket处理程序,可以连接到许多websocket客户端。然后我有另一个websocket处理程序“ DataHandler”,每次接收到消息时都会广播一条消息。

因此,我列出了TestHandler实例的全局列表,并使用它来向所有实例广播消息

ws://127.0.0.1/test_service/

TestHandler可以通过地址ws://127.0.0.1/data/接收消息,而DataHandler可以通过地址ws_clients接收消息,但是每当我遍历TestHandler时,我就永远不会在{{1 }}。

我做错什么了吗?

1 个答案:

答案 0 :(得分:2)

这就是我要做的-我将在TestHandler上创建一个新方法,该方法将 一个目的-接收一条消息并将其发送给所有连接的客户端。

在进入代码之前,我想指出(传统上)将ws_clients保留在类而不是全局对象中似乎更好。并使用set代替list

class TestHandler(...):
    ws_clients = set() # use set instead of list to avoid duplicate connections

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

    @classmethod
    def broadcast(cls, message):
        """Takes a message and sends to all connected clients"""
        for client in cls.ws_clients:
            # here you can calculate `var` depending on each client
            client.write_message(message)

    def on_close(self):
        # remove the client from `ws_clients`
        self.ws_client.remove(self)


# then you can call TestHandler.broadcast
# from anywhere in your code
# example:

class DataHandler(...):
    ...

    def on_message(self, message):
        # pass the message to TestHandler
        # to send out to connected clients
        TestHandler.broadcast(message)