동기화 I/O와 노드를 사용하여 문제에 대한 기본적인 접근 방법이다. 이 실제로이 동기화를 원한다면 노드를 사용하여 아무 것도 얻지 못합니다. 실제로는 불가능합니다. 대신 Ruby를 사용할 수 있습니다.
다른 답변은 프로덕션 서버에서이 작업을 수행하는 올바른 방법입니다. 동시성을 제한 할 수있는 일종의 대기열에 요청을 제출하여 한꺼번에 1000 개의 연결을 시도하지 않아야합니다. 나는 이것에 대해 batch을 좋아한다.
이 생산하지 않고 당신이 노드의 불안정한 버전을 사용할 수 있다면, 당신은 yield
키워드를 통해 함수의 중간에 실행을 중지하는 발전기를 사용 co를 사용하여 동기화 스타일의 구문 얻을 수 있습니다 :
를
regenerator
node --harmony-generators random.js
또는 사용 :
var co = require('co'),
request = require('co-request'),
cheerio = require('cheerio');
var urls = [];
for (var i = 0; i < 10; i++)
urls.push('http://en.wikipedia.org/wiki/Special:Random');
co(function *() {
for (var i = 0; i < urls.length; i++) {
var res = yield request(urls[i]);
console.log(cheerio.load(res.body)('#firstHeading').text());
}
})();
실행에
regenerator -r random.js | node
니스! 당신의 솔루션을 사용하고, 매력처럼 작동합니다! – kaytrance
이것은 100 개의 요청을 병렬로 작성하지는 않으며, HTTP 클라이언트에 의해 제한됩니다.이를 명확하게하고 싶습니다. –