【问题标题】:Communicate between 2 google chrome processes (tabs) with javascript使用 javascript 在 2 个 google chrome 进程(选项卡)之间进行通信
【发布时间】:2015-05-29 19:54:48
【问题描述】:

问题:

在不使用网络服务器的情况下,在单独的 Google Chrome 呈现进程(选项卡)之间进行通信的最佳方式是什么?

背景:

我正在编写一个大型应用程序,最近我决定尝试将整个应用程序迁移到浏览器。由于我工作的地方,这是谷歌浏览器。以前,该应用程序由基于 c++ 的 (Qt) 网络服务器/计算引擎组成,而浏览器仅用于 GUI。现在我已将计算引擎移至 javascript 并在浏览器中运行。

问题是 GUI 有点不稳定。它通常会运行大约 12 个小时,然后会因“Aw Snap”错误而崩溃。之前我并不担心,因为刷新页面很简单。现在,当 GUI 因为与计算引擎在同一进程中运行而崩溃时,它也会崩溃。

详情:

计算引擎现在是一个产生许多网络工作者的网页。它还将 GUI(一个单独的网页)作为弹出窗口打开,并使用 PostMessage 与其通信。

GUI 通常需要每秒从计算引擎读取约 500 个浮点数(以 JSON 形式发送)并写回约 5 个数字/秒。

昨天我很兴奋,因为我发现了我认为可以完成的 SharedWorker API。然而今天,我了解到最近对 Chrome 进行了修改,因此 SharedWorker 实际上与附加的选项卡在同一个进程中运行,它实际上强制所有附加到它的选项卡到一个进程中。显然它以前没有这样做过。有谁知道我是否可以设置任何浏览器标志以恢复旧行为?

我还阅读了一些关于 ServiceWorker 和其他新 API(例如 WebRTC)的信息。我也玩过存储 API,并认为也许它们可以用来让两个单独的进程(选项卡)以我需要的速率进行通信。

我想要一个可以在本地工作的解决方案(使用诸如 --allow-file-access-from-files 之类的开关)并且不需要安装插件(因为即使在我工作的地方也阻止了本地插件)。

注意:我看到了一些其他类似的问题,但他们没有具体解决需要有单独的流程(只有单独的选项卡)

【问题讨论】:

    标签: javascript multithreading google-chrome process communication


    【解决方案1】:

    嗯,看来我已经找到答案了。问题原来是我试图打开 GUI 窗口的方式。

    我有一个用户点击打开窗口的计算引擎链接:

    <a href="gui.html" target="_blank">Open GUI</a>
    

    然而事实证明,添加rel="noreferrer"会导致chrome在新进程中打开窗口。

    <a href="gui.html" rel="noreferrer" target="_blank">Open GUI in new process</a>
    

    在我弄清楚这一点后,SharedWorker 开始按我的预期运行,即使 GUI 选项卡崩溃,我也能够通过引擎选项卡保持运行。

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 1970-01-01
      • 2010-11-08
      • 2015-08-04
      • 2011-05-04
      • 1970-01-01
      相关资源
      最近更新 更多