2015-09-15 8 views
0

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

Эта документация упомянуть следующее заявление:

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

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

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

ответ

1

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

+0

Кажется, что после TTL будет установлено значение false, тогда как пользователь может быть в сети, или я что-то упускаю? – ybart