В моей системе есть новостная лента. Которая генерируется, как у ВК. То есть на основании событий которые зависят от других пользователей.
У меня так же есть HTTP server - MongoDB && Soket server - Redis.
Есть Front End на React.
При первом подключении с Front End`а. Я с помощью Socket.io-client шлю jwt из которого беру UserId, и soket.connection._id все это я ложу в Redis. Тем самым я закрепляю, пользователя за конкретной soket сессией.
1.И так, мне нужно как то уведомлять пользователя о том что в его списке новостей добавилось событие которое он не прочитал. Правильно ли я понимаю, что мне нужно с HTTP сервера передать данные по Soket.io-client на Soket server и там уже подписать пользователя на это событие?
2. Так же, пользователь может быть онлайн и офлайн. Все очень просто когда мы хотим посмотреть в каком состоянии находится один пользователь мы просто идем в редис и берем от туда инфу. Но когда нам нужно посмотреть онлайн или офлайн список из нескольких пользователей. У нас есть 3 варианта действий.
2.1. Хранить об этом данные в монго, и так же сделать хитрую схему.При которой запросы будут ходить между серверами.
- при каждом обновлении страницы на фронте, у нас получается будет ходить запрос в бд, что по просту как мне кажется не очень.
2.2. хранить эту информацию в редис, сделать под каждого пользователя пространство имен. К которому он подключается, и тем самым проверять в каком состоянии пользователь находится.
-при этом варианте возникают большие сложности с фронт енд частью.Так как там придется прописывать какие то жуткие алгоритмы.
2.3. Хранить информацию в редис, а для того что бы понять онлайн пользователь или офлайн. Переберать через цикл for все UserId и тем самым открывать сокет соеденение для проверки каждого пользователя.