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

Posted

技术标签:

【中文标题】延迟 websocket 更新并稍后显示消息?【英文标题】:delay websocket updates and show the message later on? 【发布时间】:2015-11-11 16:07:01 【问题描述】:

我有一个应用程序,基本上玩家可以在其中互相挑战。在某个时候他们的挑战完成了,我需要向他们(他们俩 - 有两个玩家)提供更新消息,例如“嘿,你赢了并获得了 100500 分”。反之亦然 - “嘿,你松了”

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

我可能以某种方式只需要一次获取所有待处理的通知,当它们上线时?

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

【问题讨论】:

【参考方案1】:

最近在 Pusher 博客上有一篇关于如何使用 Pusher HTTP API 检测用户是否在线的帖子:Enabling Smart Notifications with Pusher and SendGrid。

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

那么当玩家下次上线时,向他展示此内容的最佳方式是什么?

我猜“上线”有两种形式:

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

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

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

【讨论】:

以上是关于延迟 websocket 更新并稍后显示消息?的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket实现数据库更新前台实时显示

Grizzly Websocket 连接上的多条消息

将 pubsub 消息转换为 websocket 事件

SpringBoot - WebSocket

保存连接到稍后向他们发送消息的套接字

如何使嵌入消息稍后编辑