2015-10-22 1 views
0

Я установил свой httpAgent для использования одного сокета (установив его свойство maxSockets равным 1), и он использует один сокет, я напечатал свойство сокетов на консоли, и в нем действительно есть один сокет.При использовании httpAgent с одним сокетом, будет ли он ждать ответа перед отправкой следующего запроса?

Проблема: при выполнении запросов мой HTTPAgent не будет ждать ответа перед отправкой следующего запроса, является ли это нормальным поведением? Не следует ли использовать один сокет для каждого запроса?

Это мой код:

var https = require('https'); 
https.globalAgent.maxSockets = 1; 

for (var i = 0; i < 256; i++) { 
    https.get('https://encrypted.google.com/', function(res) { 
     res.on('data', function(d) { 
     process.stdout.write('\nresponse'); 
     }); 

    }).on('error', function(e) { 
     console.error(e); 
    }); 

    console.log('request ' + (i + 1) + '/256 sent'); 
} 

Он печатает «запрос х/256 посланные» 256 раз и их печатает ответ.

Я не хочу отправлять один запрос за раз, я просто хочу знать, является ли это правильным поведением при использовании одного сокета.

Заранее спасибо.

ответ

0

Да, это нормально, потому что это асинхронно. Цикл будет запускать все запросы и нажимать их на eventLoop, и они начнут разрешаться, и вы получите консоль.logs с количеством зарегистрированных протоколов немедленно.

Использование одного сокета не совпадает с выполнением запросов синхронно. Это правда, что все запросы будут проходить через один и тот же сокет, и, вероятно, только по одному будут решены.

Подход, который я хотел бы выполнить, чтобы подать один запрос только тогда, когда предыдущий был разрешен, заключается в использовании обещаний. Как только обещание будет устранено, запустите следующий, и так далее.

+0

Спасибо! Я не хочу отправлять их синхронно, я просто хотел знать, действительно ли это должен был работать агент HTTP. Ваш ответ был очень информативным, спасибо. – lucasfcosta

Смежные вопросы