如何保持 Pusher Client 对象跨页面持久化?

Posted

技术标签:

【中文标题】如何保持 Pusher Client 对象跨页面持久化?【英文标题】:How to keep Pusher Client objects persistent across pages? 【发布时间】:2013-01-29 13:15:06 【问题描述】:

我刚刚开始使用Pusher,到目前为止一切都很好。

但我意识到,当我的用户打开和关闭,或点击我网站中的内部链接时,连接会在页面卸载时自动断开。

这将使用户在每次导航到新页面时都连接和断开连接。

有没有办法让用户在浏览我的网站时保持订阅和连接?

编辑:澄清一下,我理解 Pusher 在用户关闭浏览器或页面时断开连接的行为。我只是想知道如果该人访问同一站点内的另一个内部链接,我们如何保持连接活跃。还是断开连接是最佳做法?如果有,为什么?

【问题讨论】:

【参考方案1】:

正如@devnull69 所说,目前您需要创建您的应用程序,以便它不执行标准页面导航 - 您可以将您的应用程序构建为SPA (single-page-application)。这样,页面导航之间就没有页面卸载和加载。

使用shared web workers 可以在页面加载之间保持连接。但正如 CanIUse 所展示的,浏览器支持还不完善。

Pusher 确实计划提供 message history,这意味着页面加载期间丢失的任何消息都可以在重新连接时获取。

另见:

How to maintain a WebSockets connection between pages? Do Shared Web Workers persist across a single page reload, link navigation

【讨论】:

共享 Web 工作者可能会到达那里,但在当前的 Chrome (34.0.1843.0 canary) 中,当只有一个选项卡打开到域时,共享 Web 工作者在页面加载时没有持久性。 (你可以在玩两个标签然后关闭一个标签时获得持久性,但这可能是一个错误而不是一个功能。)【参考方案2】:

唯一的解决方法是从常规页面刷新切换到 Ajax。这将使您能够保持 websocket 连接,同时仅加载使用 Ajax 请求更改的页面部分。

【讨论】:

以上是关于如何保持 Pusher Client 对象跨页面持久化?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQueryMobile 中跨页面保持相同的页眉/页脚?

如何在没有 PHP Pusher 的情况下制作实时进度条

Java JPA:如何跨 HTTP 请求保持会话活动?

是否有可以跨页面刷新保持聊天的 xmpp 客户端?

iOS - 跨视图控制器保持背景动画

跨浏览器刷新保持JavaScript对象中的值[重复]