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

时间:2016-11-18 11:18:51

标签: node.js events

我有一个简单的心跳过程应该永远运行并继续跳动,但是一旦我启动就会死掉。

$ 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);
});

但是,最后添加process.stdin.resume();会使其永久运行:

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

为什么会这样做?

2 个答案:

答案 0 :(得分:2)

heartbeats为其设置的计时器.unref调用process.stdin.resume();,这意味着它不需要事件循环保持活动状态。 由于您的示例中没有其他侦听器,因此退出。

heartbeats使节点等待用户的输入,因此进程保持活动状态。

看起来navigationIcon并不意味着只让应用程序保持活着,而是在后台运行。

答案 1 :(得分:1)

已编辑的答案

在回答您的问题时,我刚刚发布了Heartbeats ^4.0.1。现在,如果有任何事件被创建,它将使您的应用程序保持活动状态,并将继续保持活动状态,直到最后一个事件完成。

感谢您指出这一点!

原始答案

我是模块的作者,而@SergeyLapin是正确的。 Heartbeats目前不是为了让您的应用程序保持活力。我想,这对大多数人来说都是预期的行为。

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

heart.interval.ref();

我将修改API并添加一项新功能,以确保在有事件的情况下,应用程序至少在有事件时保持活动状态。