处理错过的推送事件的模式?例如,在离线或休眠模式下发送的聊天消息



我正在写一个通过push使用WebSockets的应用程序。这是一个Ruby on Rails + AngularJS应用程序,但这应该适用于任何堆栈,真的。

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

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

  • 当页面加载时,它从DB获取最后100条聊天消息并显示它们。

  • 每当有新的聊天消息进来时,服务器通过push/WebSockets将新消息推送给客户端。

  • 但是!如果客户端离线或处于睡眠模式时,推送进来,他们可能会错过消息。

处理这种情况的好模式是什么?

我对检测客户端"唤醒"有一些模糊的想法,要么强制整个页面重新加载,要么请求事件,因为某个时间戳或某个事件,但我不确定什么是确定"唤醒"而不添加轮询的好方法。也许使用push的客户端状态或连接状态特性,检测用户何时刚刚(重新)连接?

我还没能找到从push获得事件历史记录的方法,所以我想我必须自己存储这些,然后将它们发送回该客户端。

您提到,当页面加载时,您的客户机从数据库获取最后100条消息。由此,我了解到,除了通过push推送消息外,您还跟踪数据库中的所有消息。

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

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

相关内容

  • 没有找到相关文章

最新更新