我想在这个进程中添加一个一小时的超时时间,以防止在流死锁的情况下无限期等待。唯一的问题是,如果我使用setTimeout,该进程就没有机会提前结束。
有没有一种方法可以在大约一个小时后强制退出超时,而不保持进程运行?或者我只能在使用process.exit和不使用此超时之间做出选择吗?
我想在这个进程中添加一个一小时的超时时间,以防止在流死锁的情况下无限期等待。唯一的问题是,如果我使用setTimeout,该进程就没有机会提前结束。
有没有一种方法可以在大约一个小时后强制退出超时,而不保持进程运行?或者我只能在使用process.exit和不使用此超时之间做出选择吗?
我不知道 unref
何时被添加到Node中,但现在这是一种可能的解决方案。重用Matt的代码:
var timeoutId = setTimeout(callback, 3600000);
timeoutId.unref(); // Now, Node won't wait for this timeout to complete if it needs to exit earlier.
如果你保存了setTimeout
返回的值,你总是可以在它触发之前使用clearTimeout
来取消它,就像这样:
var timeoutId = setTimeout(callback, 3600000); // 1 hour
// later, before an hour has passed
clearTimeout(timeoutId);
clearTimeout
的方法,但我可以不用它。 - 700 Software可能的解决方案是使用一个新特性,它被实现为process.watchers()
,但我不知道它是否已经包含在发布的版本中。截至本帖发布时,拉取请求仍然处于打开状态。
但一般来说,您可以编写一个自定义的setTimeout
函数,将所有超时添加到计数器中,在超时到达回调之前,从计数器中删除。
然后创建一个持续的间隔,该间隔会检查并注意到所有行走者都只是由您的自定义函数设置的超时。
当它注意到这一点时,它会(清除所有这些超时,导致)退出。
当然,这并不是很好,因为
process.watchers()
会返回什么样的数据,或者它是否已经可用)
unref
在Node 0.9.1中添加。 - Matt Ball