将 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 保持在多个页面上的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 extjs 3.4 将工具提示位置保持在任何屏幕上?