때문에 여러 요청에 대한 시간 초과 Node.js를 서버에 요청

마이크 메도우 :

나는 슈퍼 나와 함께 곰 그래서 노드와 경험이 아니에요 그래서.

나는 Node.js를 서버에서이 개 경로를 가지고있다. 전형적인 하루 동안 두 경로가 동시에 요청 타격을받을 것입니다. 1 호선은 노선이 일시 중지의 원인이 자원을 차지 있도록, 국도 1 호선이 원활하게 실행되지만 노선이 몇 가지 약속을 반환하는 장기 실행 프로세스이다 (나는이 데이터 로그를 통해 무슨 일이 일어나고 결정했다).

노선이 같은 한 외모 :

  app.post('/route1', function (req, res) {
    doStuff().then(function(data){
      res.end();
    })
  }

필요에 따라서 배열 한 레코드가 한 번에 처리를 통해 분석 할 수 있다는 루트 2는 데이터의 어레이를 처리한다

app.post('/route2', function (req, res){
 async function processArray(array) {
      for (const item of array) { 
         await file.test1()(item, res);
           await file.test2()(item, res);
             //await test3,test4,test5,test6 
      }
  }
  processArray(data).then(function() {
    res.end();
  }
}

나는이 문제를 추측하고있어 그래서 프로세스 레코드를 계속하기 전에 리소스를 사용할 수있게하는 비동기 / AWAIT이 기다리고 있다는 것입니다.
route1가 route2에 방해가되지 곳이 작성하는 방법이 있나요?

최대 :

노드에서, 당신이 할 수있는 거의 모든 await경우 (또는 전화 then에)는 비동기입니다. 그것은 실행 스레드를 차단하지 않고 오히려 다른 레이어로 작업 오프로드 당신은 통제하지 않으며, 다른 일에 작업을 무료로하면서이 완료 될 때까지 그럼 그냥 기다립니다. 즉, 파일 시스템 및 네트워크 요청 작업이 포함되어 있습니다. 예를 들어, 여전히 스레드를 차단하는 방법, (파일 시스템과 같은 방식의 동기 버전을 사용있다 readFileSync대신 readFile) 또는 (4,569,485,960,485,096 계승의 계산과 같은) 자바 스크립트가 무거운 계산을하고는

당신의 route1이 중 하나를 수행하지 않습니다 감안할 때, 그것은 route2에서 모든 자원을지지 않습니다. 그들은 병렬로 실행하고 있습니다. 그것은 실제 코드를 보지 않고 말할 어렵습니다,하지만 난 노드와 관련이없는 이유로 당신의 route2 저조한 기록하고 해결하는 데 시간이 오래 걸립니다 (또는 전혀 해결되지 않는) 때문에 당신이 연결 시간 제한을 받고 꽤 있어요 성능이나 차단. 모든 배열 항목에 그 끝없는 시험 6 번 실행할 수있는 파일 시스템 대기 (또는 무엇 이건이 벌어지고)이 발생하면서, 브라우저가 응답을 보여줍니다 당신에게 연결 제한 시간을 기다리는 중지 동안 노드는 재미있다. 그것은 가장 가능성이 당신이 데이터의 모든 배열의 모든 시험을 기다리고 필요가 대신 단지 병렬로 그들 모두를 실행하지 않는 것이 있어요

더 읽기 여기 https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/ 여기 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects / 약속 / 모든

추천

출처http://43.154.161.224:23101/article/api/json?id=282946&siteId=1