簡體   English   中英

瀏覽器的快速IPC方法

[英]Fast IPC method for the browser

我寫了一個累積數據的應用程序(幾MB /秒,但每秒更新10次),並通過javascript在瀏覽器中顯示當前進程。

問題是,目前我將數據寫入文件並使用javascript加載它,但這使得應用程序非常滯后,人們抱怨他們的硬盤很多。

我希望使用像“FILE_ATTRIBUTE_TEMPORARY”這樣的標志來告訴我的操作系統實際上沒有將文件寫入磁盤,但是javascript要求我先關閉文件句柄(否則firefox無法打開它)。 因此,它將在那時被寫入磁盤,從而在最初使用該標志時消除了這一點。

我想過使用類似mysql數據庫的東西,但我真的想讓它盡可能簡單,我寧願一個不強迫用戶設置一些http或mysql服務器的解決方案。

在獨立的C ++應用程序中包含Web服務器,並直接從內存中提供數據。

我認為這是避免您現在面臨的I / O開銷的唯一選擇。 在JS中沒有IPC,消息隊列或類似的東西的接口。 TCP(或帶有websockets的UDP)似乎是避免磁盤I / O的唯一可行方法。 另一個選擇是用瀏覽器插件替換你的JavaScript,它可以用本機代碼訪問操作系統的功能。

注意:在UNIX環境中,您可以在文件系統中創建一個FIFO套接字,它也可以(或可能不)為您的目的服務。 我不認為Windows支持這樣的東西。

聽起來您的應用程序累積數據在用戶的計算機上本地運行,並且加載到瀏覽器中的頁面也是本地的。 如你所說,你不希望用戶必須配置(或者我會假設運行)一個HTTP服務器,你想避免因為性能原因將數據寫入磁盤,而你的標題包含“IPC”,我相信什么你剩下的就是創建一個瀏覽器插件或在你的頁面中包含一個ActiveX控件。

頁面中的ActiveX控件可以利用平台上可用的任何IPC機制來訪問本機代碼(例如共享內存)。

另一個選擇是讓您的應用程序成為HTTP服務器,因此不需要單獨的服務器,但這可能屬於必須配置HTTP服務器的用戶類別(例如,他們可能需要在軟件防火牆上打開端口) )。

我將研究如何為您選擇的Web服務器創建一個插件或CGI程序,以便您的Javascript可以訪問您服務器上的某個URL,並且返回的數據不是來自真實文件,而是由您的程序處理網絡請求。 (這可以在大多數Web服務器上執行。它可以像您的C ++程序寫入標准控制台一樣簡單。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM