在工作人员之间发送 Aiohttp Websocket 消息

Sending Aiohttp Websocket messages between workers

Aiohttp 有很好的 websocket 支持:

# dictionary where the keys are user's ids, and the values are websocket connections
users_websock = {}

class WebSocket(web.View):
async def get(self):
    # creating websocket instance
    ws = web.WebSocketResponse()
    await ws.prepare(self.request)
    users_websock['some_user_id'] = ws
    async for msg in ws:
        # handle incoming messages

现在,当我需要向特殊用户发送消息时:

# using ws.send_str() to send data via websocket connection
ws = users_websock['user_id']
ws.send_str('Some data')

只要我只有一个 server worker 就好了。但是在生产中我们总是有多个工人。当然,每个工人都有自己不同的 users_websock 词典。

因此,当我们需要从 worker 1 向连接到 worker 2.[=13= 的某个用户发送消息时,实际问题就出现了]

问题是我应该如何以及在何处存储 websocket 连接列表,以便每个工作人员都能获得必要的连接?

也许我可以在数据库中存储一些连接 ID 或其他东西以在任何地方创建 websocket 实例?

或者有另一种方法来解决这个问题?

aiohttp 不提供 interprocess/internode 通信渠道,它是另一个与 HTTP 处理本身无关的大而有趣的领域。

您需要工作人员之间的渠道。它可以是 Redis pubsub、RabiitMQ 甚至是 websockets——取决于你的图书馆。 或者像 https://crossbar.io/

这样的工具

没有涵盖所有可能情况的单一解决方案。