gpt4 book ai didi

Node.js 出站 http 请求并发

转载 作者:搜寻专家 更新时间:2023-10-31 23:43:30 25 4
gpt4 key购买 nike

我有一个 node.js 脚本,可以从外部 Web API 中提取数据进行本地存储。第一个请求是一个查询,它返回我需要获取更多信息的 ID 列表。对于返回的每个 ID,我从 node.js 生成一个新的 http 请求并连接到服务器以获取数据(POST 请求)。工作完成后,我会睡 3 分钟,然后重复。有时 ID 的数量有数百个。这些返回的每个单独的 http 请求可能返回 1kb 的数据,通常更少,因此往返非常短。

我今天早上收到一封来自 API 提供商的电子邮件,请求我关闭我的进程,因为我“占用了所有具有数百个连接的 API 服务器”(我实际上为此感到非常自豪,但这不是观点)。为好,我将 sleep 时间从 3 分钟增加到 30 分钟,到目前为止,这对他们很有帮助。

关于这个问题...现在我没有设置 maxSockets 或任何东西,所以我相信默认值为 5。这不应该意味着我只能在以下位置创建 5 个实时 http 请求连接一次?管理员如何拥有数百个?他们的服务器是不是在数据传递完后就挂断了?我不这样做吗?我的 http 请求结束时没有明确断开连接,所以也许我在这里有问题。那么 maxSockets 实际设置了什么?

最佳答案

抱歉,由于某些原因我没有正确阅读您的问题

maxSockets是 http 模块将为当前进程建立的最大连接数。您可以通过从 http.globalAgent.maxSockets 访问它来查看您当前的设置。

您可以通过以下方式查看有关您与给定主机的当前连接数的一些信息:

console.log("Active socket connections: %d", http.globalAgent.sockets['localhost:8080'].length )
console.log("Total queued requests: %d", http.globalAgent.requests['localhost:8080'].length)

localhost:8080 替换为您发出请求的任何主机和端口。

您可以在以下两点看到 Node 如何处理这些连接:

添加新连接并存储到请求队列

https://github.com/joyent/node/blob/master/lib/_http_agent.js#L83

从排队的请求创建连接

https://github.com/joyent/node/blob/master/lib/_http_agent.js#L148


我很快就写了这篇文章,让您了解如何稍微错开这些请求。这个特定的代码不会检查有多少请求是“未决”的,你可以很容易地修改它以允许你在任何给定时间只发出一定数量的请求(老实说这是更好的方法) .

var Stagger = function (data, stagger, fn, cb) {

var self = this;
this.timerID = 0;
this.data = [].concat(data);
this.fn = fn;
this.cb = cb;
this.stagger = stagger;
this.iteration = 0;
this.store = {};

this.start = function () {
(function __stagger() {

self.fn(self.iteration, self.data[self.iteration], self.store);

self.iteration++;

if (self.iteration != self.data.length)
self.timerID = setTimeout(__stagger, self.stagger);
else
cb(self.store);

})();
};

this.stop = function () {
clearTimeout(self.timerID);

};
};


var t = new Stagger([1,2,3,4,5,6], 1000, function (i, item, store) {
console.log(i, item);
if (!store.out) store.out = [];

store.out[i] = Math.pow(2,i);
},
function (store) {
console.log('Done!', store);
});

t.start();

此代码肯定可以改进,但它应该让您知道从哪里开始。

现场演示:http://jsbin.com/ewoyik/1/edit (注意:需要控制台)

关于Node.js 出站 http 请求并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16063627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com