概要: 当社では、ローカル リソース (RS232 / シリアル デバイス) にアクセスできる Web アプリケーションが必要です。いくつかの調査と POC の後、ActiveX、Java アプレットなどのオプションを破棄し、シリアル データを読み取り、HTTP プロトコルを介してそれらを提供するローカル アプリケーション (後でサービスに変換され、顧客に配布される C# で記述) を作成することにしました (必要なヘッダー + プレーンなシリアル データに応答する単純な TCP サーバー)。次に、Web アプリケーションは AJAX を実行して 'http://localhost:8080' にこれらのデータを読み取ります。
これはすべて、フォームの入力要素に入力するメッセージをメイン スレッドに投稿する while ループ内の Web ワーカーで行われます。静的コンテンツを提供することで、まともなパフォーマンスを得ることができます。Windows 上の Chrome 13 の古い Intel Dual Core (Core 2 Duo ではない) 1,6GHz CPU では、1 秒あたり 300 ~ 350 回の反復があり、Web ワーカー スレッドによって 5 ~ 9% の CPU が使用されます。
Q:私が今達成したいことは、各 ajax リクエストの後にある種の sleep() 関数を挿入することによって、Web ワーカーのポーリング間隔を調整することです。たとえば、最初に 100 ミリ秒で実験します。
スレッドで 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 */
}