Надежно реализуйте статус присутствия с помощью ActionCable

Я реализовал функцию чата с помощью ActionCable. Сейчас я пытаюсь реализовать статус присутствия на основе реализации появления пользователей в README.

В этой документации упоминается следующее утверждение:

Обратный вызов #subscribed вызывается, как мы покажем ниже, когда инициируется подписка на стороне клиента. В этом случае мы пользуемся этой возможностью, чтобы сказать «действительно появился текущий пользователь». Этот API появления/исчезновения может поддерживаться Redis, базой данных или чем-то еще.

Я могу реализовать онлайн-атрибут в своей базе данных и обновлять его, когда приложение получает уведомления о появлении/исчезновении. Но у меня нет никаких гарантий относительно надежности этого атрибута. Например, он может рассинхронизироваться в случае сбоя сервера.

Как я могу реализовать это надежным способом?


person ybart    schedule 15.09.2015    source источник


Ответы (1)


Поместите его в структуру Redis, срок действия которой истекает через определенное время (используйте TTL). Если вы храните его где-то бесконечное количество времени (например, в БД), он может выйти из синхронизации. Вы можете возразить, что можно установить для всех пользователей значение false при запуске приложения, но это будет работать только до тех пор, пока вы не запустите несколько серверов или рабочих процессов. Пока пользователь подключен: вставляйте значение присутствия для этого пользователя в Redis каждые несколько минут. Также обработайте событие закрытия соединения, чтобы удалить информацию о присутствии пользователя из Redis для большей точности, чем несколько минут.

person Pierre Pretorius    schedule 10.10.2015
comment
Кажется, что присутствие по умолчанию будет иметь значение false после TTL, тогда как пользователь может все еще быть в сети, или я что-то упустил? - person ybart; 12.10.2015