为什么我的心跳过程一开始就会死亡?

我有一个简单的心跳过程,应该永远运行,并继续跳动,但它一开始就会死亡。

$ node heartbeat.js Starting heartbeats $ 

我的心跳脚本非常简单。

 var heartbeats = require('heartbeats'); // tell me that the script is starting console.log('Starting heartbeats'); // create a heart that beats every second var heart = heartbeats.createHeart(1000); // every heartbeat, tell me the beat number heart.createEvent(1, function(heartbeat, last){ console.log('beat number ' + heart.age); }); 

但是joinprocess.stdin.resume(); 最后让它永久运行:

 $ node heartbeat.js Starting heartbeats beat number 1 beat number 2 beat number 3 ... 

为什么这样做?

已编辑的答案

为了回应你的问题,我刚刚发表了Heartbeats ^ 4.0.1 。 如果有任何创build的事件,它会使您的应用程序保持活动状态,并将继续保持活动状态,直到最后一个事件完成。

谢谢你指出这个!


原始答复

我是模块的作者,@SergeyLapin是正确的。 心跳目前不是为了保持您的应用程序活着。 我想,这将是大多数人的预期行为。

不过,您可以通过在代码末尾添加来保持您的应用程序的活跃:

 heart.interval.ref(); 

我将修改API并添加一个新function,以确保如果有事件发生,至less只要发生事件,应用程序就会保持活动状态。

heartbeats为它设置的定时器( github )调用.unref ,这意味着它不需要事件循环保持活动状态。 由于在你的例子中没有其他的听众,它退出。

process.stdin.resume(); 使节点等待用户的input,所以过程保持活着。

看起来heartbeats并不是要保持应用程序本身的活力,而是要在后台运行。