Javascript Nodejs请求循环限制
这是我的第一个nodejs应用程序。我正在尝试获取一些外部API并计算响应 在卷发列表变大之前,一切正常。 卷发表上有10个项目没问题,但我有一个超过90个项目的大卷发表 执行此实现的最佳方式是什么 谢谢你的帮助 致以最良好的祝愿, 约翰尼Javascript Nodejs请求循环限制,javascript,node.js,Javascript,Node.js,这是我的第一个nodejs应用程序。我正在尝试获取一些外部API并计算响应 在卷发列表变大之前,一切正常。 卷发表上有10个项目没问题,但我有一个超过90个项目的大卷发表 执行此实现的最佳方式是什么 谢谢你的帮助 致以最良好的祝愿, 约翰尼 var request=require('request'); 变量列表=[{ id:1, href:'/name1' }, { id:2, href:'/name2' }, { id:3, href:'/name3' }]; var curl=函数(id、
var request=require('request');
变量列表=[{
id:1,
href:'/name1'
}, {
id:2,
href:'/name2'
}, {
id:3,
href:'/name3'
}];
var curl=函数(id、url){
var有效载荷={
id:id
};
变量选项={
方法:“post”,
机身:有效载荷,
是的,
网址:“
}
请求(选项、功能(错误、恢复、正文){
如果(错误){
log(错误,“发布json时出错”)
返回
}
//计算响应数据
//如果匹配
如果(匹配){
console.log(url);
}
});
};
app.listen(3000,函数(){
对于(var i=0;i
您的for
循环在几微秒内启动所有已定义的请求-网站通常会检测到诸如试图使服务器过载(攻击)之类的突兀行为。由于您自身的硬件/网络限制,这样做也不是一个好主意-如果您需要发出1000个请求,并且每个响应都有1 MB,那么您突然需要下载1 GB的响应数据。更糟糕的是,您的网络可能会过载,一些请求可能会超时
您需要添加某种限制,以将任何给定时间发出的请求量限制在合理的范围内。我个人推荐这个库,特别是它的实用程序。修改代码以执行类似操作
var request = require('request');
var curlList = [{
id: 1,
href: '/name1'
}, {
id: 2,
href: '/name2'
}, {
id: 3,
href: '/name3'
}];
var curl = function(id, url, done) {
var payload = {
id: id
};
var options = {
method: 'post',
body: payload,
json: true,
url: ""
}
request(options, function(err, res, body) {
done(err);
if (err) {
console.log(err, 'error posting json')
return
}
//Calculate response data
//If match
if (match) {
console.log(url);
}
});
};
app.listen(3000, function() {
int current = 1;
int max = 5; // max 5 parallel
var scheduleJobs = function() {
current--;
while(current < max) {
current++;
var job = curList.shift();
curl(job.id, job.href, scheduleJobs);
}
}
scheduleJobs();
});
var request=require('request');
变量列表=[{
id:1,
href:'/name1'
}, {
id:2,
href:'/name2'
}, {
id:3,
href:'/name3'
}];
var curl=函数(id、url、done){
var有效载荷={
id:id
};
变量选项={
方法:“post”,
机身:有效载荷,
是的,
网址:“
}
请求(选项、功能(错误、恢复、正文){
完成(错误);
如果(错误){
log(错误,“发布json时出错”)
返回
}
//计算响应数据
//如果匹配
如果(匹配){
console.log(url);
}
});
};
app.listen(3000,函数(){
int电流=1;
int max=5;//最大并行数为5
var scheduleJobs=函数(){
当前--;
同时(电流<最大值){
电流++;
var job=curList.shift();
curl(job.id、job.href、scheduleJobs);
}
}
调度作业();
});
这允许最多5个并行请求。谢谢,我一定会尝试,在您回答之前,我找到了另一个解决方案。但这似乎更好。
var request = require('request');
var curlList = [{
id: 1,
href: '/name1'
}, {
id: 2,
href: '/name2'
}, {
id: 3,
href: '/name3'
}];
var curl = function(id, url, done) {
var payload = {
id: id
};
var options = {
method: 'post',
body: payload,
json: true,
url: ""
}
request(options, function(err, res, body) {
done(err);
if (err) {
console.log(err, 'error posting json')
return
}
//Calculate response data
//If match
if (match) {
console.log(url);
}
});
};
app.listen(3000, function() {
int current = 1;
int max = 5; // max 5 parallel
var scheduleJobs = function() {
current--;
while(current < max) {
current++;
var job = curList.shift();
curl(job.id, job.href, scheduleJobs);
}
}
scheduleJobs();
});