【问题标题】:Reliably implement presence status with ActionCable使用 ActionCable 可靠地实现在线状态
【发布时间】:2015-09-15 16:30:10
【问题描述】:

我已经使用 ActionCable 实现了聊天功能。我现在正在尝试根据自述文件中用户外观的实现来实现存在状态。

本文档提到以下声明:

#subscribed 回调被调用,正如我们将在下面展示的那样, 客户端订阅已启动。在这种情况下,我们认为 机会说“当前用户确实出现了”。那 出现/消失 API 可以由 Redis 或数据库支持,或者 还有什么。

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

如何以可靠的方式实现这一点?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 似乎在 TTL 之后状态会默认为 false,而用户可能仍然在线,或者我错过了什么?
    猜你喜欢
    • 2020-07-02
    • 2017-03-28
    • 2012-08-09
    • 1970-01-01
    • 2019-07-04
    • 2011-06-23
    • 2013-08-11
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多