【问题标题】:Fast IPC method for the browser浏览器的快速 IPC 方法
【发布时间】:2012-11-01 10:03:48
【问题描述】:

我编写了一个应用程序,它可以累积数据(几 MB/秒,但每秒更新 10 次)并通过 javascript 在浏览器中显示当前进程。

问题是目前我将数据写入文件并使用 javascript 加载它,但这使得应用程序非常滞后,人们抱怨他们的硬盘工作量很大。

我很想使用“FILE_ATTRIBUTE_TEMPORARY”之类的标志来告诉我的操作系统实际上不要将文件写入磁盘,但 javascript 要求我首先关闭文件句柄(否则 firefox 无法打开它)。因此它将在此时写入磁盘,在最初使用该标志时终止该点。

我考虑过使用 mysql 数据库之类的东西,但我真的希望它尽可能简单,并且我更喜欢不强制用户设置一些 http 或 mysql 服务器的解决方案。

【问题讨论】:

  • ostream::flush() 不强制数据到磁盘吗?
  • @Barmar 确实如此,但我想避免将数据放入磁盘。

标签: javascript c++ winapi ipc


【解决方案1】:

我会研究如何为您选择的网络服务器制作插件或 CGI 程序,以便您的 Javascript 可以访问您服务器上的某个 URL,并且返回的数据不是来自真实文件,而是由您的处理网络请求的程序。 (这在大多数 Web 服务器上都可以做到。它可以像您的 C++ 程序写入标准控制台一样简单。)

【讨论】:

  • 该应用程序旨在独立于计算机上运行,​​因此不会有网络服务器
【解决方案2】:

在您的独立 C++ 应用程序中包含一个网络服务器,并直接从内存中提供数据。

我认为这是避免您现在面临的 I/O 开销的唯一选择。 JS 中没有 IPC、消息队列或类似的接口。 TCP(或带有 websocket 的 UDP)似乎是避免磁盘 I/O 的唯一可能方法。另一种选择是将您的 JavaScript 替换为浏览器插件,该插件可以使用本机代码访问您的操作系统的功能。

注意:在 UNIX 环境中,您可以在文件系统中创建一个 FIFO 套接字,这也可能(或可能不会)满足您的目的。不过,我认为 Windows 不支持这样的功能。

【讨论】:

    【解决方案3】:

    听起来您的累积数据的应用程序正在用户机器上本地运行,并且加载到浏览器中的页面也是本地的。正如您所说,您不希望用户必须配置(或者我假设运行)HTTP 服务器,您希望避免出于性能原因将数据写入磁盘,并且您的标题包括“IPC”,我相信剩下的就是创建浏览器插件或在页面中包含 ActiveX 控件。

    页面中的 ActiveX 控件可以将平台上可用的任何 IPC 机制用于本地代码(例如共享内存)。

    另一种选择是让您的应用程序成为 HTTP 服务器,因此不需要单独的服务器,但这可能属于必须配置 HTTP 服务器的用户类别(他们可能需要在软件上打开端口例如防火墙)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      相关资源
      最近更新 更多