2015-02-05 1 views
0

Node.js에 서버 응용 프로그램을 작성했습니다. 내가 lsof -p 10893 (10,893 내 Node.js를 응용 프로그램의 PID입니다) 할 때Node.js/연결 누출을 처리하는 방법은 무엇입니까?

,이 얻을 :

node 10893 root 19u IPv4 (num) 0t0 TCP ip-X.X.X.X->ip-X-X-X.X:45403 (ESTABLISHED) 
node 10893 root 19u IPv4 (num) 0t0 TCP ip-X.X.X.X->ip-X-X-X.X:58416(ESTABLISHED) 

이 연결 보류 및 폐쇄 적이있다, 내 응용 프로그램을 다시 시작 바로 그 때.

은 내가 이해,이 문제를 처리해야 Node.js를에 다음 코드를 가지고 :

app.use(function(err, req, res, next) { 
    res.setTimeout(120000); 
    res.status(500).send('Unexpected error'); 
}); 

그러나 이러한 연결은 여전히 ​​심지어 120000 MS 후에 표시됩니다.

어떻게 해결할 수 있습니까?

+0

성취하고자하는 것은 무엇입니까? – satchcoder

+0

@satchcoder : 120000 ms 후이 연결이 닫히게됩니다. –

답변

1

이것은 Keep-Alive 문제입니다. this question 참조는 세부 사항에 대한 대답하지만, 요점은 다음과 같습니다 또한

app.use(function (req, res, next) { 
    res.set("Connection", "close"); 
    next(); 
}); 

: 당신은 모든 연결이 동작을 원하는 경우

res.set("Connection", "close"); 

는 다음 경로/라우터 위의 미들웨어로 추가 당신은 소켓 자체가 시간이 초과 할 경우, 그것은 조금 복잡합니다 :

var http = require('http'); 
var express = require('express'); 

var app = express(); 
var svr = http.createServer(app); 

svr.on('connection', function (socket) { 
    socket.setTimeout(120000, function() { 
     this.end(); 
    }); 
}); 

// other middleware/routes here 

app.use(function(err, req, res, next) { 
    res.status(500).send('Unexpected error'); 
}); 

svr.listen(PORT); 

편집 :

함수가 오류 처리기 미들웨어 (err 매개 변수가 있기 때문에) 인 것으로 나타났습니다. 즉, 시간 초과는 오류가있는 경우에만 설정되고 요청이 성공적으로 완료된 경우가 아니라는 의미입니다.

+0

Keep-alive에서 Connection close로 전략을 변경해도 영향을받지 않습니까? –

+0

파급 효과가 있습니다. 앱의 기능에 따라 다릅니다. 클라이언트가 브라우저입니까? 클라이언트가 연속적으로 서비스에 많은 요청을하는 API입니까? 이 경우 Keep-Alive가 더 좋을 것이므로 타임 아웃에 의존 할 수 있습니다. – rossipedia

관련 문제