Асинхронные веб-запросы вызывают «зависание сокета» в node.js

Я пишу код, который «for» циклически повторяет большое количество раз для очистки веб-страниц. Код такой:

var request = require('request');
for(i=0; i<10000; i++){
//request goes here, with processing in its callback
}

Но это вызывает зависание сокета. Затем я попытался выполнить запрос на синхронизацию, после чего код работает нормально и обрабатывает запрос за запросом, но это делает выполнение адским медленно. Пожалуйста, объясните, как можно обрабатывать большое количество веб-запросов, например, для парсинга.


person XIMRX    schedule 31.12.2014    source источник
comment
Вы должны посмотреть на вариант agent. Установите его false или увеличьте его maxSockets значение   -  person long.luc    schedule 31.12.2014
comment
Спасибо, мистер. d можете ли вы предоставить какую-либо ссылку на документацию или что-то в этом роде. Извините, но я новичок в node.js   -  person XIMRX    schedule 31.12.2014


Ответы (1)


Вы должны смотреть на вариант pool при отправке запроса с использованием модуля request.

Есть 3 варианта:

  • Установите его false
  • Увеличьте его maxSockets
  • Увеличение http.globalAgent.maxSockets

Примеры:

for (var i = 0; i < 10000; i++) {
   // make a request
   request({
      pool: false,
      // other options
   }, function(err, res, body) {
       // handle response here
   });
}

Использованная литература:

person long.luc    schedule 31.12.2014
comment
Спасибо, мистер Д, ты молодец. Я также добавил этот код, не знаю, поможет или нет var https = require('https'); https.globalAgent.maxSockets = your_val_here; - person XIMRX; 31.12.2014
comment
Если вы отправляете запрос https и используете globalAgent, это необходимо. - person long.luc; 31.12.2014