Управление присутствием пользователя с использованием Redis / .Net - PullRequest
0 голосов
/ 27 января 2020

Работа над приложением чата, в котором пользователь может войти в систему с нескольких клиентов, например, с настольного приложения, мобильного приложения, Интернета. В случае настольного приложения сеанс может длиться несколько дней / недель, поскольку компьютер может работать круглосуточно и без выходных. Каждый клиент будет подключаться к одному из net серверов веб-сокетов, каждый из которых использует один и тот же сервер Redis.

В настоящее время пытаются выяснить, как управлять пользовательским присутствием с помощью Redis. Ключевые случаи:

  1. Пользователь подключается - Отправить уведомление «Онлайн»
  2. Пользователь подключается, но уже подключен к сети от другого клиента - Уведомление не отправлено (если отправлено дублированное уведомление, его но это не проблема)
  3. Пользователь, подключенный с одного клиента - Сбои сервера Websocket - Отправка уведомлений в автономном режиме
  4. Выход пользователя / последний клиент отключается - Отправка уведомлений в автономном режиме
  5. Подключено несколько клиентов, один переходит в автономный режим - Уведомление не отправлено
  6. Подключено несколько клиентов (на разных серверах веб-сокетов), Сбой одного сервера - Уведомление не отправлено
  7. Когда клиент запрашивает обновление у друга list - предоставить статус онлайн / оффлайн (это можно сделать с помощью set instersection)

Предупреждение: я видел примеры в Интернете и нашел свое решение, но для этого требуется отдельный процесс очистки, и я бы предпочитаю не использовать cron задание / фоновый процесс. К вашему сведению: у каждого пользователя есть уникальный идентификатор, и каждое соединение также имеет уникальный идентификатор GUID.

Что я действительно ищу, так это как сделать это с помощью Redis с точки зрения структур данных и потока.

...