Javascript 在http请求节点js的循环中获取ENOBUFS
一些背景:Javascript 在http请求节点js的循环中获取ENOBUFS,javascript,node.js,Javascript,Node.js,一些背景: 我要做的是从客户端接收一个带有一些ID的CSV文件。 我在文件上运行,对于我生成的每个ID,需要进行一个rest查询,然后再进行另一个rest查询 当我对1000到5000个ID执行此操作时,此操作效果良好,但在这之后,我在日志中的大多数响应都是错误,而不是“200” 错误是: [Error: connect ENOBUFS XX.XX.XX.XXX:8080 - Local (undefined:undefined)] code: 'ENOBUFS', errno: 'EN
我要做的是从客户端接收一个带有一些ID的CSV文件。 我在文件上运行,对于我生成的每个ID,需要进行一个rest查询,然后再进行另一个rest查询 当我对1000到5000个ID执行此操作时,此操作效果良好,但在这之后,我在日志中的大多数响应都是错误,而不是“200” 错误是:
[Error: connect ENOBUFS XX.XX.XX.XXX:8080 - Local (undefined:undefined)]
code: 'ENOBUFS',
errno: 'ENOBUFS',
syscall: 'connect',
address: 'XX.XX.XX.XXX',
port: 8080
我在类似问题上看到的建议是使用async.eachofflimit
,这样可以发出少量请求,但对于某些请求,在第一次迭代后不会继续。-如果需要模块,请参阅文档 简单代码说明:
router.post('/upload', function(req, res, next) {
.
.
.
async.eachOfLimit(ids,100, CheckAndUpdate);
});
function CheckAndUpdate(DirtyId, callback){
request({
uri: "http://XX.XX.XX.XXX:8080/rest/getTureIDs" + DirtyId, ",
json: true
}, function(err, res, data) {
if (err) {
console.log('Error:', err);
} else if (res.statusCode !== 200) {
console.log('Status:', res.statusCode);
} else {
if (data["TrueIDs"].length > 0){
for (var index in data["TrueIDs"]){
var fetchedID = data["TrueIDs"][index]["id"];
UpdateSomethingForID(fetchedID);
}
}
}
});
}
function UpdateSomethingForID(ID, callback){
request({
uri: "http://XX.XX.XX.XXX:8080/rest/SetTouchedToday/" + ID,
json: true
}, function(err, res, data) {
if (err) {
console.log('Error:', err);
} else if (res.statusCode !== 200) {
console.log('Status:', res.statusCode);
} else {
console.log("Great success");
}
});
}
所以问题是:如何以更恰当的方式“垃圾邮件”请求,以避免ENOBUFS? 或者我对
的每个限制有什么错
提前谢谢 你根本没打电话回电话。我没有什么需要做的。我用一个只包含console.log(“nothing”)的回调进行了测试,但仍然不起作用,但回调是为1次迭代打印的……您肯定会对您的服务器进行DDoS攻击!“我没有任何需要在那里做的事情”。是的,您可以这样做:在每次迭代之后,您必须调用callback
。正如我所说的,即使为了调用回调,这也不起作用。我再试一次,我:)你根本没打电话回电话。我没有什么需要做的。我用一个只包含console.log(“nothing”)的回调进行了测试,但仍然不起作用,但回调是为1次迭代打印的……您肯定会对您的服务器进行DDoS攻击!“我没有任何需要在那里做的事情”。是的,您可以这样做:在每次迭代之后,您必须调用callback
。正如我所说的,即使为了调用回调,这也不起作用。我会再试一次,我会:)