Здравствуйте, появилась необходимость привязать сессии socket.io к пользователю. Делал с начало привязку путём создания в redis пары user_id:socket_id, но при открытие допустим новой вкладки socket_id перезаписывался и выходило так, что предыдущая сессия является "устаревшая".
Пример:
На сайте есть список уведомлений, пока открыта одна вкладка, сокет по определённому эвенту обновляет этот список, но если пользователь откроет другую вкладку, то значение для user_id перепишется. Отсюда выходит что список уведомлений будет обновляться только на новой странице.
Вопрос:
Как правильно организовать закрепление socket_id за пользователем чтобы не было казусов по типу новой открытой вкладки?
Можно на клиенте сразу после подключения отправлять событие, в котором передавать токен пользователя. А сервер, при получении этого события, сохраняет соответствие между ключом и socket_id в массиве (или в list если это редис). И затем, когда серверу нужно отправить сообщение пользователю, он отправляет сообщение по всем socket_id, связанным с переданным токеном пользователя.