@BuckBuckTucTuc

Node JS + Socket.IO управление сокетами с помощью localStorage?

Добрый вечер всем, кто читает данный вопрос. Решил писануть диплом на Node + Socket.io. Суть состоит в том, чтобы создать сервис похожий на SoundCloud. Решил использовать сокеты для оперативного обмена данными между сервером и клиентом и (ну и на защите показать что не просто 4 года в универе отсидел). Суть в том, что данным сервисом могут пользоваться как авторизованные так и не авторизованные юзеры ( с разным функционалом). Хотел большую часть обмена информацией сделать на сокетах и тут всплыл вопрос. Когда пользователь открывает или перезагружает страницу создается новый сокет, однако нужно создать функционал, который позволит серверу различать сокеты различных юзеров. Для этого у каждого юзера при первом входе на сайт в localStorage хранится ключ, который представляет собой id сокета под которым зашел, а также массив сокетов которые относятся к этому юзеру + поле которое считает количество сокетов. Все бы неплохо и сервер имеет массив в котором по этому ключу формируется аналогичный массив сокетов, только вот проблема в том, что как я говорил в начале при перезагрузке страницы сокет закрывается и создается новый, а в localStorage он есть и там его надо убрать. Вообще отсюда проблема, как управлять активными сокетами юзера и на сервере и на клиенте. Событие 'disconnect' не успевает по-видимому сработать на клиенте, так как страница перезагружается и скрипт не успевает сработать. Была идея после перезагрузки страницы при событии Onload вызвать функцию через timeout которая сравнит данные на сервере и на клиенте, но на мой взгляд это глупо и после такого мне вместо диплома выдадут его рисунок, а во вторых этот метод не сработает если закрыть все вкладки сайта вообще. Надеюсь на понимание. Сразу извиняюсь за грамматику, руки трясутся предзащита дышит в спину. Если кто то хочет предложит механизм сессий, прошу только объясните как вести сессию с неавторизоваными пользователями. Сразу предупреждаю в этом я новичок и многих вещей не понимаю. Прошу не сердиться а говорить по делу.
  • Вопрос задан
  • 654 просмотра
Пригласить эксперта
Ответы на вопрос 2
taliban
@taliban
php программист
идентифицируйте клиента не по сокету а по идентификатору, пусть это будет айди первого сокета, запишите его себе и постоянно шлите при новом коннекте как айди пользователя, сокет лишь соединение.
В итоге при каждом новом конекте к вам будет приходить один и тот же айди от одного человека, с ним и работайте.
Ответ написан
@kuzin_mv
как управлять активными сокетами юзера и на сервере

Может быть вот этот пример вам поможет https://github.com/kuzinmv/node-cluster-socket.io/... Если у вас нет UserId для не авторизованных клиентов можете использовать Id сессии, например из вот https://github.com/expressjs/session из этого или подобного middleware, если у вас Express.js. Или сами на сервере генерируйте какой-либо id и кладите в кукес.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы