Как корректно создавать ws соединение?
В учебных целях начал ознакамливаться aiohtt.
Делаю пет проект где на фронте испольую VueJs, на бэке aiohttp соответственно.
Столкнулся с задачей как правильно сделать оповещения в режиме реального времени, к примеру, как это реализовано в ВК, когда приходят новые сообщения/добавляются друзья/прочее.
На фронте, если пользователь авторизирован, то автоматически устанавливается ws соединение с сервером
ws = new WebSocket(URL);
На бэке есть обработчик ws:
async def websocket_handler(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
request.app['websockets']['user_id'] = ws
async for msg in ws:
pass # корректна ли эта инструкция, чтобы при потери соединения выполнялась строчка ниже?
request.app['websockets'].remove(ws)
return ws
Так же есть несколько эндпоинтов(new_message, new_friend, etc), которые должны посылать в этот вебсокет какую-то информацию
async def new_message(request):
# тут валидируем и сохраняем сообщение
# отправляем данные в сокет
ws = request.app['websockets']['receiver_id']:
ws.send_str('new message detail')
Ожидается, что в какой бы части приложения клиент не находился, ему всегда будут залетать оповещения о новых событиях, т.к. вебсокет открывается раз, когда пользователь авторизируется, и не закрывается, пока не будет потеряна связь.
Правильно или плохо так делать? Почему?
Как будет вести себя приложение, если к примеру одновременно будет открыто 10к соединений?