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

时间:2014-06-23 20:47:10

标签: angularjs websocket pusher

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

我刚刚意识到我的应用并没有处理错过的推送事件,我很想知道一些已建立的模式是什么。

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

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

  • 每当有新的聊天消息进入时,服务器都会通过Pusher / WebSockets将新消息推送到客户端。

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

处理这个问题的好方法是什么?

我有一些关于检测客户的模糊想法"醒来"并且要么强制整页重新加载,要么从某个时间戳或某个事件开始请求事件,但是我不知道什么是确定"唤醒"的好方法。不添加轮询到混合中。也许使用Pusher的client presenceconnection states功能,检测用户何时(重新)连接?

我还没有找到一种方法来获取Pusher的事件历史,所以我想我必须自己存储这些事件,然后再将它们发回给该客户。

1 个答案:

答案 0 :(得分:0)

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

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

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