Система информирования пользователя через 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 навсегда?
Если проект не очень большой советую использовать feathersjs.com там уже есть всё готовое для работы с сокетами.
то есть если есть возможность переходить на фреймворк - переходите