概述: 我們公司需要具有訪問本地資源(RS232 /串行設備)的Web應用程序。經過一些研究和POC之後,我們放棄了諸如ActiveX,Java Applet等選項,並決定創建本地應用程序(用C#編寫,稍後將轉換爲服務並分發給客戶),該應用程序讀取串行數據並通過HTTP協議提供服務簡單的TCP服務器回答必要的標題+簡單的串行數據)。然後,Web應用程序將AJAX讀入這些數據的「http:// localhost:8080」。在不犧牲CPU資源的情況下睡眠在JavaScript web worker中
所有這些都是在一個Web工作者在一個while循環發佈消息的主線程填充它的表單的輸入元素中完成的。通過提供靜態內容,我可以獲得不錯的表現。在Windows上的Chrome 13中,較舊的Intel Dual Core(非Core 2 Duo)1,6GHz CPU上每秒有300-350次迭代,Web Worker線程佔用5-9%的CPU。
問:我現在想要實現的是通過在每個ajax請求後插入某種sleep()函數來節制web worker中的輪詢間隔。開始時嘗試100ms。
什麼是最好的解決方案,而不會犧牲線程中的CPU資源?
注意:我可以在TCP服務器代碼中插入一些延遲作爲最後的手段。
編輯:
我需要睡在工人。示例(簡單化爲清楚起見):
AJAX = new XMLHttpRequest();
while (true) {
AJAX.open("GET", "http://127.0.0.1:8080", false);
AJAX.send(null);
var ean = AJAX.responseText;
if (ean != '') { postMessage(ean); }
/* NEED TO SLEEP HERE WHETHER THE RESPONSE WAS SENT OR NOT */
}
您是否考慮過使用WebSockets進行真正的TCP連接。在C#中實現一個websocket http服務器# – Raynos