保持节点服务器运行“监视”的事情发生

我认为这个问题是由于对节点缺乏了解,但我正在创build一个带有树莓派和节点的运动传感器。

我不明白如何让我的节点服务器运行。 我可以得到它使用setInterval按预期工作,但我不认为这是我应该这样做。

基本上我希望能够通过node index.js启动程序,并让它继续观察传感器连接的GPIO引脚,看看是否发生了什么事情。 如果发生了什么事情,那么它会做一些事情,但是如果发生更多的事情,请不断观察传感器

我所做的保持运行状态与此类似:

 var foo = require('require necessary things up here'); setInterval(function(){ //code for detecting sensor stuff here }, 1000) 

这有效,但我知道我不认为这是正确的做法。

如果我像下面这样做,它只是执行function,login到控制台,但不监视更改,只是退出。

 var foo = require('require necessary things up here') function checkForSensorStuff(){ //code for detecting sensor stuff here console.log('checking stuff') } 

我怎样才能保持服务器运行,只是不断使用setInterval监视函数的变化?

当没有其他事情要做时,节点进程退出。 通过逐行运行启动脚本来启动节点进程。 当该脚本完成执行时,如果没有别的事情要做(没有定时器,没有开放的套接字监听传入的连接等),那么它会closures,因为没有任何事件可能导致事件并导致服务器上的一些操作。

所以,如果你想要你的服务器继续运行,你必须为未来的事件发生提供一些方法。 正如你发现重复定时器是一种方法来做到这一点。 应该没有理由使用计时器纯粹是为了保持您的服务器运行。 相反,你需要在你的服务器上configuration一些将来会触发事件的东西。 如果你没有任何事情会导致未来的事件,那么你可能需要使用setInterval()来定期轮询一些状态来决定是否有什么等待。

如果您要在node.js中监视Raspberry Pi上的GPIO状态,则可以使用pigpio库 ,它将提供事件驱动的方式来监视GPIO更改。 这应该会自动保持您的服务器运行。

通过GPIO更改获取事件的另一个选项是onoff库 。

我有一个树莓派作为温度控制器读取两个GPIO温度探头。 我只是使用setInterval()计时器来每10秒轮询一次温度读数,那也可以。

我不明白如何让我的节点服务器运行

你需要打开一个像套接字或文件这样的资源句柄。 如果没有活动手柄打开,节点退出。 在你的例子setInterval是定时器,防止节点退出。

另请参阅process._getActiveHandle

https://github.com/myndzi/wtfnode