2014-01-15 2 views
1

나는 익스프레스 앱을 가지고 있으며 수신 된 요청마다 도메인을 사용합니다. 추가 미들웨어가 도메인 내부에서 실행되도록 미들웨어를 추가했습니다.node.js 도메인을 삭제해야합니까? 언제해야합니까?

app.use(function(req, res, next) { 
    var d = domain.create(); 

    d.req = req; 

    d.add(req); 
    d.add(res); 

    d.run(next); 
}); 

또한, 요청이 처리되는 동안 실행되는 일부 코드는 ...이 원인 '나는 통과 할 수없는 일을 해요는 헤더, 쿠키 등의 초기 요청에 대한 참조를 가져 process.domain.req를 사용 req이 코드에 직접 적용됩니다. 이 이상한 코드는 그것이 실행되는 곳을 모르는 일종의 교차 환경 코드 (브라우저와 노드 용)입니다. 내부적으로 몇몇 기본 레이어는 노드와 브라우저, 특히 네트워크 코드에서 다르게 구현됩니다. 브라우저의 경우 XMLHttpRequest이고 NodeJS의 경우 request lib를 기반으로하는 사용자 정의 래퍼입니다.

메모리 누수가 걱정됩니다. 도메인에 저장된 req을 언급합니다. 그들은 이런 것들을 지키고 쓰레기 수거를하지 못하게 할 수 있습니까?

또한 도메인을 정기적으로 처분해야합니까? 아니면 일부 가장자리/오류 경우에 처리해야합니까?

답변

3

일반적으로 도메인을 오류 또는 완료 이벤트에 처리하는 경우 다음 예는 https://gist.github.com/regality/3061748입니다.

그러나 내 이해에서 domain.dispose() 메소드는 더 이상 사용되지 않습니다. 자세한 내용은이 문제를 참조하십시오. https://github.com/joyent/node/issues/5018

doc에 따르면 오류가 발생하면 도메인 프로세스를 종료하는 것이 좋습니다. 이 링크에는 좋은 설명과 예가 있습니다.