使用ActionCable可靠地实现在线状态

时间:2015-09-15 16:30:10

标签: ruby-on-rails ruby-on-rails-5 actioncable

我使用ActionCable实现了聊天功能。我现在正在尝试基于README中用户外观的实现来实现状态。

本文档提及以下声明:

  

当我们在下面显示a时,会调用#subscribed回叫   启动客户端订阅。在这种情况下,我们接受   有机会说"目前的用户确实出现了#34;。那   出现/消失API可以由Redis或数据库支持   无论如何。

我可以在我的数据库中实现在线属性,并在应用程序收到显示/消失通知时更新它。但我不能保证这个属性的可靠性。例如,如果服务器出现故障,它可能会失去同步。

我怎样才能以可靠的方式实现这一点?

1 个答案:

答案 0 :(得分:1)

将其置于Redis结构中,该结构在一定时间内到期(使用TTL)。如果将它存储在某个地方无限长时间(如数据库),它可能会失去同步。您可能会争辩说,您可以在应用程序启动时将所有用户状态设置为false,但这只会在您运行多个服务器或工作程序之前有效。用户连接时:每隔几分钟将此用户的状态值插入Redis。还处理连接关闭事件以从Redis中删除用户状态,准确度高于几分钟。