【发布时间】: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