使用 WebSockets 跨多个网页进行实时提要?

Posted

技术标签:

【中文标题】使用 WebSockets 跨多个网页进行实时提要?【英文标题】:Using WebSockets for live feeds across multiple web pages? 【发布时间】:2012-02-17 22:14:48 【问题描述】:

大多数 WebSocket 示例都以单个网页为中心,其中内容会根据聊天、财务或其他一些实时指标进行更新 - 对于单个页面来说是有意义的。

但是,考虑到新闻提要滚动条,该提要需要存在于网站的每个页面上,我想就此展开对话。

目前该站点是一个经典的 ASP 站点,但最终将迁移到 MVC/MVP。

由于我们不想在每次单击链接时打开/关闭 Web 套接字(当前加载一个新页面),我正在考虑 IFrame 类型的 UI,这可以通过可更新的 DIV 和 jQuery 来完成.

给定一个带有页眉 (c1) 和页脚 (c2) 的 simple 容器化 UI 模板,当单击页眉上的链接时,内容位于中心 (c3) 并带有左 (c4) 和右 (c5) 条,主菜单所在的位置,而不是更新整个页面,我可以将页面加载到其中一个容器(可更新的 div)中,保留 WebSocket 容器的连接 - 避免需要重新建立连接。

还有哪些其他选项可以考虑实现这一目标?

谢谢。

更新

如果您查看 FB 的实现,他们在右侧的状态栏甚至聊天,跨链接点击停留在页面上。这是如何实现的?

【问题讨论】:

History.js 项目就是这样做的。 github.com/balupton/History.js 【参考方案1】:

使用 IFrame 或以其他方式修改页面状态(而不是整页加载)可能是目前最好的方向,但共享 Worker 也可以做你想做的事。这个想法是允许从同一来源同时加载的多个页面共享一个 web worker。我怀疑即使在同一站点内进行页面导航,共享工作者也会持续存在。但是,我实际上并没有尝试过,而且 W3C 规范在这个问题上对我来说并不清楚。我很想知道这是否属实。

请注意,Chrome、Safari 和 Opera 中存在 Shared Workers,但 IE 和 Firefox 尚未承诺支持 Shared Workers:

http://dev.w3.org/html5/workers/#shared-workers-introduction http://caniuse.com/#feat=sharedworkers

【讨论】:

我创建了一个新问题来解决共享工作者的持久性问题:***.com/questions/9336774/… 因此,目前,根据我在您的新问题(使用网络工作者)的回复中读到的内容,我们不能保证连接将在多个网页请求中保持打开状态。因此,使用框架或可更新的 DIV 将是最佳解决方案。我想你可以通过保持另一个窗口打开来模拟一个工作人员,该窗口保持 websocket 连接并写入父窗口/框架......虽然很乱。 @ElHaix,是的,如果您想要一个适用于多个地方的单一答案,我认为这可能是目前最好的方向。如果您有时间/资源,那么对于某些有能力的用户来说,探索 Shared Workers 可能是值得的。

以上是关于使用 WebSockets 跨多个网页进行实时提要?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django 和 websockets 进行跨站点请求伪造保护

如何使用 websockets 进行实时游戏

Django + 龙卷风 |图片上传

使用 Ratchet Websockets 进行 PHP 实时聊天

使 PHP 变量跨多个网页成为全局变量

如何在经典的 ASP Web 应用程序之上集成 WebSockets?