1

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

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

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

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

4

3 回答 3

3

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

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

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

于 2012-11-12T23:10:01.027 回答
1

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

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

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

于 2012-11-12T23:10:19.793 回答
0

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

于 2012-11-12T23:00:01.777 回答