Javascript “保持节点服务器运行”;观看";等待事情发生

Javascript “保持节点服务器运行”;观看";等待事情发生,javascript,node.js,raspberry-pi,Javascript,Node.js,Raspberry Pi,我认为这个问题是由于对节点缺乏了解,但我正在用树莓pi和节点创建一个运动传感器 我不知道如何保持我的节点服务器运行。我可以使用setInterval使其按预期工作,但我认为我不应该这样做 基本上,我希望能够使用node index.js启动程序,并让它继续观察传感器连接的GPIO引脚,以查看是否发生了什么事情。如果有什么事情发生,它会做一些事情,但会一直监视传感器,以防更多的事情发生 我为保持其运行所做的工作与此类似: var foo = require('require necessary t

我认为这个问题是由于对节点缺乏了解,但我正在用树莓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的情况下持续监视函数中的更改

我不知道如何保持我的节点服务器运行

您需要打开资源(如套接字或文件)的句柄。如果未打开任何活动句柄,则节点将退出。在您的示例中,setInterval是防止节点退出的计时器

另请参阅进程。\u getActiveHandle


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

因此,如果希望服务器继续运行,就必须为将来的事件提供某种方式。正如您所发现的,循环计时器是实现这一点的一种方法。应该没有理由纯粹为了保持服务器运行而使用计时器。相反,您需要在服务器中配置一些东西,以便在将来触发事件。如果您没有任何东西会导致将来的事件,那么您可能需要使用
setInterval()
定期轮询某些状态,以确定是否有什么事情要做

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

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


我有一个树莓皮被用作温度控制器,读取两个GPIO温度探头。我只是用一个
setInterval()
定时器每10秒轮询一次温度读数,效果也不错。

你能定义(用词,用代码…)什么是“持续监视变化”吗?你认为这是怎么发生的?@Amit传感器在正常环境下会发出
0
。当它检测到某种东西时,它会发出
1
。我希望程序持续运行,并检查传感器是否发出
1
。再次定义“持续运行”。持续做什么?@Amit检查传感器是否发出
0
1
所以你想要一个循环?使用循环…这解释了流程结束的原因,但没有回答如何最好地保留它的问题,而这正是OP的具体目标。@Elliott McNary-这回答了你的问题吗?