延迟 websocket 更新并稍后显示消息?

delay websocket updates and show the message later on?

我有一个应用程序,基本上玩家可以互相挑战。在某个时候他们的挑战完成了,我需要向他们(他们两个 - 有两个玩家)提供更新消息,例如 'Hey, you won and got 100500 points'。反之亦然 - "Hey You looose"

我使用 websockets 和 pusher api 来处理实时更新,这在玩家 "online" 时非常有效。但如果他们不是呢?适合我的方法看起来我仍然可以使用推送器处理事件,而不仅仅是显示消息,我可以将它存储到 db 到 table challenge_notifications 字段 messagesseen = 0。没关系,但是当玩家下次上线时向玩家展示的最佳方式是什么?我不想 ajax 请求在每个页面加载时检查是否有任何用户看不见的通知。

我可能以某种方式只需要在所有未决通知上线时获取一次?

我使用 Laravel 5 作为我的后端。

Pusher 博客上最近有一个 post 关于如何使用 Pusher HTTP 检测用户是否在线 API:Enabling Smart Notifications with Pusher and SendGrid.

该示例使用 SendGrid,但您可以改为将更新存储到数据库,向他们发送推送通知、SMS 等。

what would be the best way then to show this to the player when he comes online next time?

我猜有两种形式 "coming online":

  1. 用户已不在网站上,必须导航至该网站。在这种情况下,当页面加载时,您可以查询数据库并直接为它们提供任何错过的通知(这似乎是最简单的解决方案)。或者,如果它适合您的应用程序架构,请在页面加载时发出单个 AJAX 请求以获取任何错过的通知。

  2. 如果用户由于移动或网络连接不良而离线。在这种情况下,您可以使用 pusher.connection.bind('connected', function() {}); 绑定到 connected 事件,然后查询他们是否错过了任何通知。

总而言之:在正常页面呈现(在服务器上)时查询数据库以查找任何错过的通知似乎是最简单的解决方案,并且不需要太多资源使用。但是如果他们不在线,还有其他机制可以发送通知(电子邮件、短信)。