2012-05-30 2 views
1

node.js 서버를 정상적으로 구현했습니다. 이런 기본적으로 뭔가 :이 같은 서버를 닫을 때http 서버를 닫을 때 소켓이 끊기는 이유는 무엇입니까?

var shutDown = function() { 
    server.on('close', function() { 
     console.log('Server ' + process.pid + ' closed.'); 

     process.exit(); 
    }); 

    console.log('Shutting down ' + process.pid + '...'); 
    server.close(); 
} 

그러나, 내 지속적인 요청에 Error: socket hang up 오류가 발생합니다.

나는 server.close()을 사용하여 서버가 수신 대기 및 새 요청 수락을 중단하지만 보류/요청 열기를 모두 처리한다고 생각했습니다. 그러나 그 결과는 Error: connect ECONNREFUSED이됩니다.

내가 뭘 잘못하고 있니?

추가 정보 : 서버는 마스터와 3 명의 분기 된 어린이/근로자로 구성됩니다. 그러나 주인은 포트를 듣거나 구속력이 없으며, 아이들 만이 위와 같습니다.

답변

1

server.close()을 보면, 새로운 연결이 중단되는 것 같아서 이미 열려있는 연결에 오류가있는 것 같습니다.

아마도 shutDown()server.connections을 확인하고 더 이상 존재하지 않을 때까지 기다릴 수 있습니까?

var shutDown = function(){ 
    if(server.connections) return setTimeout(shutDown, 1000); 

    // Your shutDown code here 
} 

약간 추악한 (그리고 훨씬 덜 확장 성), 그러나 대기하지 않고 :가 발생할 때 당신은 연결을 추적 할 수 있으며, 첫 번째 블록 당신이 제안 실제로 정확히

server.on('connection', function(e){ 
    // Keep track of e.connection in a list. 
    // You'll want to remove e.connection 
    // from the list if it closes on its own 
} 

var shutDown = function(){ 
    // Close all remaining connections in the list 

    // Your shutDown code here 
} 
+0

그들에게 나는 자신을 닫습니다 :) 하지만 연결 번호를 확인하고 아무 것도 남지 않으면'close()'를 호출하면 연결이 끊어 질 때까지 오랜 시간이 걸릴 수 있습니다. 문서에서 보았을 때, 나는'close()'를 호출 한 후 서버가 듣기를 멈추고, 모든 보류중인 요청이 처리 될 때까지 기다렸다가 그 후에 만'exit()'를 기다릴 것이라고 생각했다. 그게 내가하고있는 일이고, 그게 소켓 끊기가 일어나는 곳이야. 뭔가 잘못 해석했을 것입니다. – nekaab

+0

흠. 이상 하네. console.log ('Remaining connections :'+ server.connections);와'server.close()'의 직후에'console.log ('Remaining connections :'+ this. .connections);'process.exit()'바로 앞에. 아마도 유용한 정보를 줄 것입니다. – pieman72

관련 문제