gpt4 book ai didi

Node.js:使用domain.dispose()

转载 作者:太空宇宙 更新时间:2023-11-03 23:10:55 25 4
gpt4 key购买 nike

我正在用 node.js 编写一个服务器,并希望在连接因错误而失败时保持其运行。因此,我尝试使用新的 domain 模块,但找不到使用 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();

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

一切都很好,循环继续,错误被一个接一个地记录:

[...]
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() 的目的和语义,要么它做了不应该做的事情。我可能会深入研究来源,但与此同时,如果只是为了后代,澄清这个问题会很好。如果您知道如何使用该函数来保持应用程序的活力,请分享。谢谢。

最佳答案

通过使用 v0.8.11, Node 将使用 dm.dispose() 正确循环。

关于Node.js:使用domain.dispose(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11796449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com