2014-11-11 4 views
1

방금 ​​Node.js를 시작했고 서버에 게시물 요청을 보내는 간단한 http 클라이언트를 작성하려고합니다.응답을 읽지 않으면 노드 http 클라이언트가 계속 실행되는 이유는 무엇입니까?

var req = http.request(
     { 
       host : 'localhost', 
       port: 3000, 
       url : '/', 
       method:'POST' 

     },function(res){ 
       console.log('res status - ' + res.statusCode); 
       res.on('data', function(){}); //<-------- 

     } 
); 

(req.end()를 요청하고 호출하기 위해 작성한 코드는 생략했습니다). 나는 마지막 행이 주석 처리되었고 클라이언트가 응답을 읽지 않는 경우 클라이언트가 종료되지 않는 것을 관찰했습니다. 이 이유는 무엇입니까?

+0

뭔가를 종료하고 다시 보내려면'req.end()','req.send()'또는 유사한 것을 호출해야합니다. – adeneo

답변

3

이 문제는 다음이다 Node 구현 :
http.request()을 실행하면 (즉, 요청 방법의 2 인자)에는 '응답'핸들러가 다음 추가되어 있지 않은 경우 아래의 행동

와 객체 http.ClientRequest를 생성 응답은 완전히 폐기됩니다. 그러나 '응답'이벤트 핸들러를 추가하면 '읽을 수있는'이벤트가있을 때마다 response.read()을 호출하거나 '데이터'을 추가하여 응답 객체의 데이터를 소비해야합니다. '처리자를 호출하거나. resume() 메서드입니다. 데이터가 소비 될 때까지 'end'이벤트가 발생하지 않습니다. 또한 데이터를 읽을 때까지 메모리를 소비하여 결국 '프로세스 메모리 부족'오류가 발생할 수 있습니다.

+0

그는 이미 "** 데이터 **"처리기를 추가하고 있습니다. " – slebetman

+0

"OP에서 의미하는 "클라이언트가 마지막 줄을 호출하여 응답을 읽지 않으면 클라이언트가 종료되지 않습니다"라는 내용의 줄이 있다고 생각합니다. 그가 '데이터'처리기를 주석 처리했을 때 클라이언트가 종료되지 않는 이유를 알고 싶습니다. – Amitesh

관련 문제