현재로서는 을 매우 개의 API (특히 this)에서 가져온 대규모 JSON 개체 (여러 가지 요인에 따라 몇 MB 이상 될 수 있음)를 요청하려고합니다. 그러나 문제는 NodeJS가 무엇인가를 영원히 받아 들인 다음 메모리가 부족한 것입니다. 즉, 응답 콜백의 첫 번째 행은 실행되지 않습니다.NodeJS http 및 매우 큰 응답 본문
각 항목을 개별적으로 요청할 수는 있지만 엄청난 양의 요청입니다. 새로운 API의 개발자를 인용하려면 다음과 같이하십시오.
지금까지 Tranquility에 대한 모든 시장 주문을 받고 싶다면 지역마다 모든 유형을 개별적으로 요청해야했습니다. 일반적으로 50+ 개 지역에 13,000 개 이상의 유형이 곱해집니다. 단지 13,000 개의 유형과 50 개의 지역 일지라도 모든 시장 정보를 얻기 위해서는 650,000 건의 요청이 필요합니다. 그리고 5 분 캐시 창에서 모든 데이터를 가져 오려면 초당 거의 2,200 개의 요청이 필요합니다.
분명히, 그것은 좋은 생각이 아닙니다.
을 나중에 사용하기 위해 다시 설정하려고 시도한 다음next
URL을 따라 가며 마지막 페이지에 도달 할 때까지 반복하십시오. 이 일을 할 수있는 방법이 있습니까?
편집 : 다음은 문제 코드입니다. URL을 방문하면 브라우저에서 정상적으로 작동합니다.
// ...
REGIONS.forEach((region) => {
LOG.info(' * Grabbing data for `' + region.name + '#' + region.id + '`');
var href = url + region.id + '/orders/all/', next = href;
var page = 1;
while (!!next) {
https.get(next, (res) => {
LOG.info(' * * Page ' + page++ + ' responded with ' + res.statusCode);
// ...
첫 번째 LOG.info
행은 실행되지만 두 번째 행은 실행되지 않습니다.
응답이 몇 MB 경우에 정보를
시도? 나는 그 질문부터 시작하고 싶을 것 같은데. 방금 JSON 응답을 측정했는데 6.23MB였습니다. – jfriend00
문서는 크기가 "여러"MB가 될 수 있음을 경고합니다. 어느 쪽이든, 메모리 및 실행에 걸리는 시간에는 여전히 문제가 있습니다. 브라우저에서 링크를 방문하는 데는 오랜 시간이 걸리지 않습니다. – NukesForKids
node.js 코드를 알려주십시오. 여기 브라우저에서도 잘 작동합니다. https://jsfiddle.net/jfriend00/qscyqt7d/ – jfriend00