Обзор:
Наша компания нуждается в веб-приложении, которое имеет доступ к локальным ресурсам (RS232 / последовательные устройства). После некоторых исследований и POC мы отказались от таких опций, как ActiveX, Java-апплеты и решили создать локальное приложение (написанное на C #, которое позже будет преобразовано в службу и распространено среди клиентов), которое считывает последовательные данные и обслуживает их по протоколу HTTP ( простой TCP-сервер, отвечающий на необходимые заголовки + простые последовательные данные). Затем веб-приложение выполняет AJAX для 'http://localhost:8080' чтения этих данных.
Все это выполняется веб-работником в цикле while, который отправляет сообщение в основной поток, заполняя его элементом ввода формы. Служа статическому контенту, я могу получить достойную производительность. На более старом двухъядерном процессоре Intel Core (не Core 2 Duo) 1,6 ГГц в Chrome 13 в Windows выполняется 300–350 итераций в секунду, а 5–9% ЦП используется рабочим веб-потоком.
В: Чего я хочу сейчас добиться, так это уменьшить интервал опроса в веб-работнике, вставляя какую-то функцию sleep () после каждого ajax-запроса, например, эксперимент с 100 мс в начале.
Что было бы лучшим решением без потери ресурсов процессора в потоке?
Примечание: я мог бы добавить некоторую задержку в код сервера TCP в качестве крайней меры.
EDIT:
Мне нужно спать внутри рабочего. Пример (упрощенно для ясности):
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 */
}