保持节点服务器正在“观察”发生的事情

时间:2016-05-13 05:09:42

标签: 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)

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

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

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

function checkForSensorStuff(){
  //code for detecting sensor stuff here
  console.log('checking stuff')
}

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

2 个答案:

答案 0 :(得分:5)

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

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

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

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

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

答案 1 :(得分:1)

  

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

您需要打开资源的句柄,如套接字或文件。如果没有打开活动句柄,则退出节点。在您的示例中,setInterval是一个阻止节点退出的计时器。

另见process._getActiveHandle

https://github.com/myndzi/wtfnode