2012-08-03 3 views
1

나는 node.js에 서버를 작성하고 오류로 인해 연결이 실패 할 때 계속 실행하려고합니다. 따라서 새로운 domain 모듈을 사용하려고하는데 domain.dispose()을 사용하는 올바른 방법을 찾을 수 없습니다.Node.js : using 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,이를위한 별도의 도메인을 만들고 도메인에 이미 터를 추가하고 이미 터의 오류를 트리거합니다. 그런 다음 반복됩니다. ,

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

이 방법 : 나는 그것이 있어야한다고 가정 domain.dispose()를 추가, 이제

[...] 
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] } } } 
[...] 

:

모든 오류가 잇달아 로그인,주기가 계속, 잘 이 사이클은 두 번만 반복됩니다 :

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()의 목적과 의미를 이해하지 못하거나 어쩔 수없는 일을합니다. 나는 아마 근원을 파헤쳐 보일 것이다. 그러나 그 동안은 미래 세대를 위해서만 문제를 분명히하는 것이 좋을 것이다. 응용 프로그램을 활성 상태로 유지하는 데 함수를 사용하는 방법을 알고 있으면 공유하십시오. 감사.

답변

3

v0.8.11 노드를 사용하면 dm.dispose()으로 올바르게 반복됩니다.