我怎样才能把一个循环在这个服务器

例如,我想做类似的事情:

var http = require('http'); const PORT=8080; var myvar = "Test: "; function handleRequest(request, response){ response.end(myvar); } var server = http.createServer(handleRequest); server.listen(PORT, function(){ console.log("Server listening on: http://localhost:%s", PORT); }); var asdf = 0; while(true){ asdf += 1; myvar += asdf; } 

var asdf上面的代码工作,但是当我把while循环,因为它没有留下时间的服务器工作。

但我不知道如何做到这一点。 我一直在寻找答案,但人们说停止while循环和处理请求,然后继续循环,但我不想停止循环。 我认为这可能是没有实现一些线程,但首先我想听到一些意见,因为我是新的node.js,我不认为实现锁等。

node.js中的Javascript是单线程和事件驱动的。 传入的事件只能在当前的一段JavaScript执行完成并返回到系统后才能处理。

因此,你不能只是循环一些while循环,因为在你的服务器上没有其他的Javascript可以运行。 对于应该及时处理传入请求的服务器,不能处理任何事件,即死亡事件。

Node.js是一个事件驱动的系统。 必须通过事件(定时器,networkingcallback,其他asynchronouscallback等)来安排活动。 任何长时间运行的循环阻止整个服务器做其他事情。

如果要定期检查某个引脚的状态,并且基础硬件驱动程序不提供事件驱动的接口,那么您可能需要使用setInterval()setTimeout()来“轮询”硬件的状态。 只要确保你不要把轮询间隔的时间缩短到不会让你的服务器做太多事情。

 // poll the pin state setInterval(function() { let pinState = getPin(); if (pinState === someValue) { // do something } }, 100); 

作为一个例子,我有一个Raspberry Pi运行node.js作为阁楼风扇控制器。 它有两个温度探头(一个用于室外空气温度,一个用于阁楼空气温度)。 它每隔10秒使用一次setInterval()来检查这两个温度值,并决定阁楼风扇是否应该打开或closures。

理想情况下,您可以避免在node.js中的定时器上进行轮询,因为它效率不高。 你宁愿有一个底层的驱动程序,让你注册callback引脚状态或硬件设备的一些重大变化。 但是,有时你的司机不这样做,所以你必须恢复老式的“民意测验”。

如果您只想连续处理数据,则可以使用setInterval函数,该函数将持续调用间隔较小的函数。 这会让你剩下的代码运行。

 // synchronous code, with a while loop while(true) { // do something } // NOTE: anything after this never runs // asynchronous code, with setInterval setInterval(function() { // do something }, 10); 

10这里是每次运行代码之间的毫秒数。 对于大多数目的(例如不断读取引脚),less量(如10毫秒,或每秒100次)应该可以正常工作。

我不确定,但可以尝试通过http向您自己的节点服务器发送请求或使用restler节点模块。

 function recursive() { http.request(url, function(err, res) { recursive(); }) } 

https://nodejs.org/api/http.html#http_http_request_options_callback

当你想开始你的recursion时调用这个方法。