如何保持 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 对象跨页面持久化?的主要内容,如果未能解决你的问题,请参考以下文章