2014-03-19 5 views
1

NodeJs에서 소켓 시간 초과에 대한 질문이 있습니다. 첫 번째 시간에서 Express Http 요청 시간 초과

, 나는 folowing 코드를 추가합니다

req.socket.once('timeout', function(err) { 
     imports.logger.warn('Express socket timeout.', err); 
     res.status(504).end('Connection timeout'); 
    }); 

을 그리고 나는 종종 익스프레스 소켓 시간 초과 오류가 콘솔에로드 된 페이지 후 오랜 시간이 기록이있다. 그래서 (디버깅을 위해) 나는이 라인을 추가하려고 :

req.socket.setTimeout(4000); 

을 그리고 마지막으로 내 모든 요청이 사초 후 익스프레스 소켓 타임 아웃을 처리하는 것을 보았다. 웹에서 검색 한 결과 많은 정보를 발견했지만 여전히 이해할 수 없습니다.

요청을 닫는 res.json() 함수가 소켓을 닫지 않는 이유를 이해할 수 없습니다. Keep-Alive와 연결된 링크가 있습니까? 웹 소켓 링크?

웹 소켓 링크 인 경우 가장 적합한 번호는 무엇입니까? 소켓을 닫아야하고 (있는 경우) 정확히 어디에 있습니까?

내 간단한 익스프레스 노선 코드를 볼 수 있습니다 필요한 경우 : HTTP에서

app.get(apiUrl + '/:id', function (req, res) { 

    NewsFeed.findById(req.params.id, function (err, newsFeed) { 

     if (err) { 
      return app.error(res, 404, 'Error 404: No news found'); 
     } 

     res.json(formatNewsFeed(newsFeed)); 

    }); 

}); 

답변

0

, 당신이 요청하는 소켓의 엄격한 일대일 매핑이 요구 사항이 없습니다. 가능한 경우 브라우저와 서버는 요청이 완료된 후에 소켓을 보관하여 이후 요청에서 다시 사용할 수있게합니다. 새 소켓을 여는 데는 시간이 걸리고 기존 소켓을 재사용하는 것이 더 빠를 수 있습니다. 이것을 HTTP Keep-Alive라고합니다. 일반적으로 기본 소켓에 대해 걱정할 필요가 없으며 요청 객체와 만 작업 할 수 있습니다.

+0

감사합니다. 하지만 expressjs가 소켓 타임 아웃 예외를 발생시키는 것은 정상적인 동작인지 잘 모르겠습니다. 내 다른 프로젝트에서는 expressjs에이 문제가 없었습니다. – jeremieca