Я создал сценарий node.js, который сканирует сеть для доступных HTTP-страниц, поэтому есть много соединений, которые я хочу запускать параллельно, но кажется, что некоторые из запросы ждут, пока предыдущий не завершится.Множество параллельных HTTP-запросов в node.js
Ниже приводится фрагмент кода:
var reply = { };
reply.started = new Date().getTime();
var req = http.request(options, function(res) {
reply.status = res.statusCode;
reply.rawHeaders = res.headers;
reply.headers = JSON.stringify(res.headers);
reply.body = '';
res.setEncoding('utf8');
res.on('data', function (chunk) {
reply.body += chunk;
});
res.on('end', function() {
reply.finished = new Date().getTime();
reply.time = reply.finished - reply.started;
callback(reply);
});
});
req.on('error', function(e) {
if(e.message == 'socket hang up') {
return;
}
errCallback(e.message);
});
req.end();
Этот код выполняет только 10-20 запросов в секунду, но мне нужно 500-1k производительность запросов. Каждый запрошенный в очереди запрос выполняется на другом HTTP-сервере.
Я пытался сделать что-то подобное, но это не помогло:
http.globalAgent.maxSockets = 500;
Похоже, вы делаете HTTP-запросы. Возможно ли получить так много запросов, которые быстро проходят через интернет-соединение? У меня здесь очень быстрое соединение, но мой пинг на ближайший сервер составляет около 52 мс, что, я думаю, означает, что я могу сделать около 20 HTTP-запросов в секунду. –
Я запускаю этот скрипт на машине, и я уверен, что справится с этим множеством запросов. если быть точным: это сервер hetzner 6s. – druidvav
Конечно, но вы читали, что я сказал? Я не думаю, что вы можете * сделать *, что многие запросы по HTTP с единственным подключением к Интернету, независимо от того, насколько мощна ваша машина. Когда вы делаете HTTP-запрос, вам придется ждать ответа с другого конца. Вы можете, конечно, обслуживать больше запросов, чем это, но это потому, что вы будете обслуживать запросы от многих браузеров, каждый со своим собственным интернет-соединением. –