2016-11-18 107 views
1

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

$ 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 
... 

它为什么要这样做呢?

+0

请注意我的更新回答。我已经推出了一个修复程序,该程序应该可以按照预期运行,而无需任何其他代码 –

回答

1

编辑答案

在回答你的问题,我刚刚发布Heartbeats ^4.0.1。如果创建了任何事件,它现在会让您的应用程序保持活动状态,并且会在最后一个事件完成之前继续保持活动状态。

谢谢你指出这一点!


原来的答案

我模块的作者,@SergeyLapin是正确的。 Heartbeats目前不打算让您的应用程序保持活跃状态​​。我想,这将是大多数人的预期行为。

但是你可以保持您的应用程序活着在你的代码的末尾添加:

heart.interval.ref(); 

我会修改API,并添加了新的功能,以确保如果有事件,该应用程序保持至少只要有事件就会活着。

2

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

process.stdin.resume();使节点等待用户的输入,所以该过程保持活动状态。

看起来像heartbeats并不意味着只保留应用程序本身,而是在后台运行。

+0

Abu有关如何让应用永久运行的建议? – amingilani

+0

这是一个正确的答案。心跳不会让您的应用程序保持活动状态。 –

相关问题