将 Websocket-Connection 保持在多个页面上

Posted

技术标签:

【中文标题】将 Websocket-Connection 保持在多个页面上【英文标题】:Hold Websocket-Connection over several pages 【发布时间】:2015-03-30 15:31:22 【问题描述】:

我需要一个想法来设计一个与我的 C++-Webserver 通信的复杂 html/javascript(jQuery) 系统。

直到现在我有一个主 index.html 并且我通过事件加载子模块:

$(".MainButton").click(function()
   $("#swap").load($(this).attr('alt'));
);

现在的问题是每个子模块都需要一个 Websocket 连接,我不想为我正在加载的每个子模块打开一个新的连接。

是否可以打开全局 Websocket 连接..

var ws = new WebSocket("ws://localhost:800/stream");

.. 并在每个子页面中使用 ws?

非常感谢。

【问题讨论】:

【参考方案1】:

您的问题的标题和内容不同。至于内容,如果你通过 jQuery 的 load 方法加载 HTML 片段(而不是页面),这些片段会合并到文档中,结果只有那个文档存在。如果是您的情况,您为什么不通过将ws 设为window 的全局变量并在子模块中使用它来打开main.html 上的连接?只要子模块的URI与CORS同源或跨源,就可以访问和操作main.html的ws

但是,如果您坚持应该在多个页面上保持连接,包括刷新 main.html 作为您的问题的标题,那么除非您使用 Single-page application,否则现在是不可能的。详情见以下:

How to maintain a WebSockets connection between pages? Do Shared Web Workers persist across a single page reload, link navigation http://tavendo.com/blog/post/websocket-persistent-connections/

【讨论】:

以上是关于将 Websocket-Connection 保持在多个页面上的主要内容,如果未能解决你的问题,请参考以下文章

将对象保持在 CoreAnimation 效果之上

如何使用 extjs 3.4 将工具提示位置保持在任何屏幕上?

如何在将项目保持在列中的同时将项目左对齐?

如何将 NavigationController 保持在 subViewController 方向?

在 XAML 中,如何将椭圆保持为圆形?

3D 数学 - 仅将位置保持在一定码数内