浏览器的快速IPC方法

时间:2012-11-12 22:50:32

标签: javascript c++ winapi ipc

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

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

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

我想过使用类似mysql数据库的东西,但我真的想让它尽可能简单,我宁愿一个不强迫用户设置某些http或mysql服务器的解决方案。

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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