2014-11-11 4 views
6

안녕하세요 저는 js 노드에서 새로 왔습니다.노드 j에서의 병렬 http 요청 수 제한

루프 안에 여러 개의 HTTP 요청을 시작하는 스크립트가 있습니다. 1000 개의 HTTP 요청을 만들어야한다고 가정 해 봅니다. IP마다 단 하나의 HTTP 요청 만 할 수 있으며 단 10 개의 IP가 있습니다.

따라서 10 개의 병렬 요청 후에 다른 응답을 기다려야합니다.

HTTP 요청에서 다른 응답을 시작하는 스크립트를 차단하지 않고 대기하는 방법은 무엇입니까?

무료 IP를 기다리는 동안 잠시 실행하면 내 모든 스크립트가 차단되고 응답이 표시되지 않습니다.

감사합니다.

답변

19

async 모듈을 사용하십시오.

당신은 URL 목록을 통해 10

var urls = [ 
    // a list of 100 urls 
]; 

function makeRequest(url, callback) { 
    /* make a http request */ 
    callback(); // when done, callback 
} 

async.eachLimit(urls, 10, makeRequest, function(err) { 
    if(err) throw err; 
}); 

에이 코드는 것이다 루프를 동시 요청을 제한하고 각각에 대해 makeRequest를 호출 할 async#eachLimit를 사용할 수 있습니다. 10 개의 동시 요청에서 중지되며 처음 10 개 중 하나가 완료 될 때까지 11 번째 요청을 진행하지 않습니다.

+0

완벽하게, 내 목숨을 구해줬습니다. D –