概述:我们公司需要可以访问本地资源(RS232 / 串行设备)的 Web 应用程序。经过一些研究和 POC,我们放弃了 ActiveX、Java Applets 等选项,并决定创建本地应用程序(用 C# 编写,稍后将转换为服务并分发给客户)读取串行数据并通过 HTTP 协议提供服务(简单的 TCP 服务器回答必要的标头 + 纯串行数据)。然后 Web 应用程序执行 AJAX 以“http://localhost:8080”读取这些数据。
所有这些都是在一个网络工作者中完成的,在一个while循环中将消息发送到主线程,并将其填充到表单的输入元素中。通过提供静态内容,我可以获得不错的性能。在 Windows 上 Chrome 13 中较旧的 Intel 双核(不是 Core 2 Duo)1.6GHz CPU 上,每秒迭代 300-350 次,网络工作线程占用 5-9% 的 CPU。
问:我现在想要实现的是通过在每个 ajax 请求之后插入某种 sleep() 函数来限制 web worker 中的轮询间隔,例如在开始时尝试 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 */
}