Aiohttp имеет отличную поддержку веб-сокетов:
# 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 везде?
Или есть другой способ приблизиться к этому?