当使用带有单个套接字的httpAgent时,它会在发送下一个请求之前等待响应吗?

When using an httpAgent with a single socket, will it wait for a response before sending the next request?

本文关键字:下一个 请求 响应 等待 单个 套接字 httpAgent      更新时间:2023-09-26

我已经将我的httpAgent设置为使用单个套接字(将它的maxSockets属性设置为1),并且它确实使用单个套接字,我已经在控制台上打印了套接字属性,并且其中确实有一个套接字。

问题是:在做请求时,我的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');
}

输出"request x/256 sent" 256次,然后输出响应。

我不想一次发送一个请求,我只是想知道当使用单个套接字时这是否是正确的行为。

是的,这是正常的,因为它是异步的。循环将触发所有请求并将它们推送到eventLoop,它们将开始得到解决,你将获得控制台。包含立即记录的请求数的日志。

使用单个套接字与同步执行请求不同。的确,所有请求都将通过同一个套接字,并且可能一次只解析一个请求。

我要遵循的方法是,只在前一个请求被解决时才触发一个请求,使用promise。一旦一个承诺被解决了,就会触发下一个,以此类推。