@vetsmen

Система информирования пользователя через socket. Как?

Пишу систему для информирования клиентов в реалтайме через сокет сервер, используя такую систему:
1) Клиент отправляет токен авторизации на сервер, в котором зашифрован id пользователя
2) Сервер его получает и проверяет валидность токена
3) При успешной валидации в redis заношу пару "id:count". Если запись уже есть, увеличиваю count на 1.
4) Создаю сокет комнату со значением id и пробрасываю пользователя в нее

В результате я имею полноценный список активных коннектов авторизованных пользователей.

Вопросы:
1) Мне нужно передать информацию клиенту по его id. Для этого я проверяю, существует ли такой id, если да, делаю emit to room с текущим идентификатором.
Адекватно ли каждый раз делать проверку на существование записи и потом только эмитить дату? Возможно, разумнее было бы не хранить никакую пару, просто делать emit to room с текущим id, а дальше сокет сам разберется: слушает ли кто эту комнату - отправит данные, нет - просто не дойдут никуда.
2) Безопасно ли работать с комнатами по id? Пользователь с клиента не может же слушать комнату, пока я с сервера не заставлю слушать ее?
3) Count я использую, если есть 2 и более активных коннекта от одного пользователя. При прекращении коннекта уменьшаю count на 1. Может ли быть такое, что событие дисконнекта сокета не отработает на сервере и запись останется в redis навсегда?

Спасибо.
  • Вопрос задан
  • 305 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vodniciarv
Если проект не очень большой советую использовать feathersjs.com там уже есть всё готовое для работы с сокетами.
то есть если есть возможность переходить на фреймворк - переходите
Ответ написан
Ваш ответ на вопрос

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

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