0

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

本文档提到以下声明:

正如我们将在下面展示的,当客户端订阅启动时,将调用 #subscribed 回调。在这种情况下,我们借此机会说“当前用户确实出现了”。该出现/消失 API 可以由 Redis 或数据库或其他任何东西支持。

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

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

4

1 回答 1

2

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

于 2015-10-10T12:26:27.493 回答