Node.js:使用domain.dispose()

我在node.js中编写一个服务器,并希望在连接失败时保持运行。 所以,我试图使用新的domain模块,但无法find使用domain.dispose()的正确方法。

首先, node -v :v0.8.3

我认为应该调用domain.dispose()来清除错误,以清除域对象的设置。 但结果不是我所期望的,我也找不到任何有关正确使用的文档或讨论。

这是我想出来的代码来隔离问题:

 var domain = require('domain'); var EventEmitter = require('events').EventEmitter; var i = 0; function cycle() { process.nextTick(cycle); var emitter = new EventEmitter(); emitter.i = ++i; emitter.on('test', function() { throw new Error('asdasd ' + emitter.i); }); var dm = domain.create(); dm.on('error', function(er) { console.error('Error', er); //dm.dispose(); }); dm.add(emitter); emitter.emit('test'); } cycle(); 

它创build一个EventEmitter ,它是一个单独的域,将发射器添加到域并触发发射器的错误。 然后重复。

一切都很好,循环继续,错误logging一个接一个:

 [...] Error { [Error: asdasd 1068] domain_thrown: true, domain: { members: [ [Object] ], _events: { error: [Function] } } } Error { [Error: asdasd 1069] domain_thrown: true, domain: { members: [ [Object] ], _events: { error: [Function] } } } [...] 

现在,我添加domain.dispose() ,我想它应该是:

 dm.on('error', function(er) { console.error('Error', er); dm.dispose(); }); 

这样,循环只重复两次:

 Error { [Error: asdasd 1] domain_thrown: true, domain: { members: [ [Object] ], _events: { error: [Function] } } } Error { [Error: asdasd 2] domain_thrown: true, domain: { members: [ [Object] ], _events: { error: [Function] } } } 

没有更多的输出,程序刚刚退出。

所以,要么我不明白domain.dispose()的目的和语义,或者做它不应该做的事情。 我可能会深入研究这个问题,但同时,如果仅仅为了子孙后代,澄清这个问题还是很好的。 如果您知道如何使用该function来保持应用程序的活跃,请分享。 谢谢。

通过使用v0.8.11节点将正确地与dm.dispose()循环。