让Node Server保持"观察"状态

Ell*_*ary 4 javascript node.js raspberry-pi

我认为这个问题是由于对节点缺乏了解,但我正在研究创建一个带有覆盆子pi和节点的运动传感器.

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

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

我为保持运行而采取的措施与此类似:

var foo = require('require necessary things up here');

setInterval(function(){
  //code for detecting sensor stuff here
}, 1000)
Run Code Online (Sandbox Code Playgroud)

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

如果我执行类似下面的操作,它只执行功能,记录到控制台,但不会注意更改,只是退出.

var foo = require('require necessary things up here')

function checkForSensorStuff(){
  //code for detecting sensor stuff here
  console.log('checking stuff')
}
Run Code Online (Sandbox Code Playgroud)

如何让服务器保持运行,以便在不使用setInterval的情况下持续监视函数的变化?

jfr*_*d00 5

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

因此,如果您希望服务器继续运行,则必须为将来的事件提供一些方法.正如您所发现的那样,定期计时器是一种方法.应该没有理由仅使用计时器来保持服务器运行.相反,您需要在服务器中配置将在未来触发事件的内容.如果您没有任何可能导致未来事件发生的事情,那么您可能需要使用setInterval()定期轮询某些状态来决定是否还有其他事情要做.

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

在GPIO更改时获取事件的另一个选项是onoff库.

我有一个Raspberry Pi用作温度控制器,可以读取两个GPIO温度探头.我只是使用一个setInterval()计时器每隔10秒轮询温度读数,这也很好.