延迟 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
与字段 messages
和 seen = 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 更新并稍后显示消息?的主要内容,如果未能解决你的问题,请参考以下文章