在工作人员之间发送 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/
这样的工具
没有涵盖所有可能情况的单一解决方案。
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/
这样的工具没有涵盖所有可能情况的单一解决方案。