Angularjs 处理错过推送事件的模式?例如,脱机或睡眠模式下发送的聊天信息

Angularjs 处理错过推送事件的模式?例如,脱机或睡眠模式下发送的聊天信息,angularjs,websocket,pusher,Angularjs,Websocket,Pusher,我正在写一个应用程序,它使用WebSockets via。这是一个RubyonRails+AngularJS应用程序,但这应该适用于任何堆栈 我刚刚意识到我的应用程序不能处理错过的推送事件,我很想知道这方面的一些既定模式是什么 我的应用程序不是聊天,但让我们假装它是 当页面加载时,它从数据库获取最后100条聊天信息并显示它们 每当收到新的聊天信息时,服务器都会通过Pusher/WebSocket将新信息推送到客户端 但是!如果客户端脱机或在推送时处于睡眠模式,它们可能会错过消息 处理这个问题

我正在写一个应用程序,它使用WebSockets via。这是一个RubyonRails+AngularJS应用程序,但这应该适用于任何堆栈

我刚刚意识到我的应用程序不能处理错过的推送事件,我很想知道这方面的一些既定模式是什么

我的应用程序不是聊天,但让我们假装它是

  • 当页面加载时,它从数据库获取最后100条聊天信息并显示它们

  • 每当收到新的聊天信息时,服务器都会通过Pusher/WebSocket将新信息推送到客户端

  • 但是!如果客户端脱机或在推送时处于睡眠模式,它们可能会错过消息

处理这个问题的好模式是什么

我对检测客户端“唤醒”有一些模糊的想法,或者强制重新加载整个页面,或者从某个时间戳或某个事件开始请求事件,但是我不确定在不向混合中添加轮询的情况下,什么是确定“唤醒”的好方法。可能使用推送器或功能,检测用户何时(重新)连接


我无法找到从Pusher获取事件历史记录的方法,因此我想我必须自己存储这些历史记录,然后仅将它们发送回该客户端。

您提到,当页面加载时,您的客户端从数据库中获取最后100条消息。从这一点上,我了解到,除了通过Pusher推出消息外,您还需要跟踪数据库中的所有消息

因此,当您的客户机联机时,它应该检查与第一次访问页面时通常检查的端点相同的端点。然后,您可以将返回的集合与缓存在客户端上的消息进行比较,查看是否遗漏了任何内容


我不太熟悉Pusher API,但在我看来,您可以监听
不可用
断开
事件。因此,当您看到这些事件时,只需设置一个标志,等待重新建立连接,然后再次从服务器中提取历史记录,并与本地缓存进行比较。

有点相关:获取旧消息的最安全时间是连接状态变为
已连接时。
。初始负载和重新连接(
已连接
)时都是这种情况。请参阅连接状态文档,它实际上并不检查端点本身——服务器将JSON数据呈现到一些内联JavaScript中,这样我们就可以在不等待其他请求的情况下获得数据。但我当然可以添加这样一个端点。我喜欢只需再次获取最后100条消息并找出您看到的消息的简单性。我会记住那个选项。非常感谢。还有你,莱格特。知道何时检查更新对我来说比如何获取更新更神秘:)