![](/img/trans.png)
[英]Nodejs Using domain.dispose() causes server to respond with status 0
[英]Node.js: using domain.dispose()
我正在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節點將使用dm.dispose()
正確循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.