Работа над приложением чата, в котором пользователь может войти в систему с нескольких клиентов, например, с настольного приложения, мобильного приложения, Интернета. В случае настольного приложения сеанс может длиться несколько дней / недель, поскольку компьютер может работать круглосуточно и без выходных. Каждый клиент будет подключаться к одному из net серверов веб-сокетов, каждый из которых использует один и тот же сервер Redis.
В настоящее время пытаются выяснить, как управлять пользовательским присутствием с помощью Redis. Ключевые случаи:
- Пользователь подключается - Отправить уведомление «Онлайн»
- Пользователь подключается, но уже подключен к сети от другого клиента - Уведомление не отправлено (если отправлено дублированное уведомление, его но это не проблема)
- Пользователь, подключенный с одного клиента - Сбои сервера Websocket - Отправка уведомлений в автономном режиме
- Выход пользователя / последний клиент отключается - Отправка уведомлений в автономном режиме
- Подключено несколько клиентов, один переходит в автономный режим - Уведомление не отправлено
- Подключено несколько клиентов (на разных серверах веб-сокетов), Сбой одного сервера - Уведомление не отправлено
- Когда клиент запрашивает обновление у друга list - предоставить статус онлайн / оффлайн (это можно сделать с помощью set instersection)
Предупреждение: я видел примеры в Интернете и нашел свое решение, но для этого требуется отдельный процесс очистки, и я бы предпочитаю не использовать cron задание / фоновый процесс. К вашему сведению: у каждого пользователя есть уникальный идентификатор, и каждое соединение также имеет уникальный идентификатор GUID.
Что я действительно ищу, так это как сделать это с помощью Redis с точки зрения структур данных и потока.