2015-01-21 2 views
4

ExpressJs (버전 4.X) 서버가 있는데 서버를 올바르게 중지해야합니다.ExpressJs 서버를 올바르게 종료하는 방법은 무엇입니까?

일부 요청은 오랜 시간 (1-2 초) 걸릴 수 있으므로 새로운 연결을 거부하고 진행중인 모든 요청의 끝을 기다려야합니다. 일부 작업의 중간에 서버를 종료하면 서버가 불안정한 상태가 될 수 있습니다.

나는 다음과 같은 코드를 시도했다 :

//Start 
var app = express(); 
var server = https.createServer(options, app); 
server.listen(3000); 


//Stop 
process.on('SIGINT', function() { 
    server.close(); 
}); 

그러나,이 코드는 가까운 연결 유지하지 않는 연결을, 일부 클라이언트는 오랜 시간 동안 접속을 유지할 수 있습니다.

그럼 어떻게 모든 연결을 제대로 닫을 수 있습니까?

+0

미들웨어를 사용하여 새로운 요청을 허용할지 여부를 제어하는 ​​방법은 어떻습니까? –

답변

4

서버가 종료 될 경우 일부 미들웨어를 사용하여 새 요청을 차단할 수 있습니다.

var app = express(), 
    shuttingDown = false; 

app.use(function(req, res, next) { 
    if(shuttingDown) { 
     return; 
    } 
    next(); 
}); 

var server = https.createServer(options, app); 
server.listen(3000); 

process.on('SIGINT', function() { 
    shuttingDown = true; 
    server.close(function(){ 
     process.exit(); 
    }); 
}); 
+1

미들웨어에서'return;'을 사용하면 클라이언트에 타임 아웃이 발생하지 않습니까? 'server unavailable'을 반환해야합니다. 그렇지 않으면 컨테이너가 종료 될 때 컨테이너가 먼저이 응용 프로그램으로 라우트해서는 안됩니다. – tsuz

관련 문제