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')
只要我只有一名服务器工作人员,那就很好。但在生产中我们总是有多个工人。当然,每个工人都有自己不同的users_websock
字典。
因此,当我们需要从 worker 1 向连接到 worker 2 的某个用户发送消息时,会出现实际问题。
问题是我应该如何以及在何处存储websocket连接列表,以便每个工作人员都能获得必要的连接?
也许我可以在DB中存储一些连接id或者什么来创建websocket实例?
或者还有另一种方法可以解决这个问题吗?
答案 0 :(得分:0)
aiohttp不提供进程间/节点间通信通道,它是另一个与HTTP处理本身无关的大而有趣的区域。
您需要工人之间的渠道。它可以是Redis pubsub,RabiitMQ甚至websockets - 取决于您的库。 或者像https://crossbar.io/
这样的工具没有一种解决方案可以涵盖所有可能的情况。