MeG1tsune
@MeG1tsune
NodeJS - мой личный круг ада

Как закрепить сессии socket.io к пользователю?

Здравствуйте, появилась необходимость привязать сессии socket.io к пользователю. Делал с начало привязку путём создания в redis пары user_id:socket_id, но при открытие допустим новой вкладки socket_id перезаписывался и выходило так, что предыдущая сессия является "устаревшая".

Пример:
На сайте есть список уведомлений, пока открыта одна вкладка, сокет по определённому эвенту обновляет этот список, но если пользователь откроет другую вкладку, то значение для user_id перепишется. Отсюда выходит что список уведомлений будет обновляться только на новой странице.

Вопрос:
Как правильно организовать закрепление socket_id за пользователем чтобы не было казусов по типу новой открытой вкладки?
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
Можно на клиенте сразу после подключения отправлять событие, в котором передавать токен пользователя. А сервер, при получении этого события, сохраняет соответствие между ключом и socket_id в массиве (или в list если это редис). И затем, когда серверу нужно отправить сообщение пользователю, он отправляет сообщение по всем socket_id, связанным с переданным токеном пользователя.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
берем нормальную базу данных и делаем там примерно такую структуру:
sessions:
user_id | session_id

при отсоединении удаляем, при соединении добавляем. Для рассылки во все сессии - выбираем по пользователю
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы