将ENOBUFS置于http请求节点js

时间:2017-05-04 15:57:44

标签: javascript node.js

一些背景:
我所做的是从客户端收到带有一些ID的CSV文件。 我在文件上运行,对于每个ID,我需要进行一个休息查询,然后是另一个休息查询。

当我执行1000到~5,000个ids时,这个工作正常但在此之后,我在日志中的大多数响应都是错误而不是" 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.eachOfLimit这种方式来提出少量请求,但对于某些人来说,在第一次迭代后它不会继续。
http://caolan.github.io/async/docs.html#eachOfLimit - 文档是否为模块。

简单的代码说明:

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? 或者我对eachOfLimit的错误是什么?

提前致谢!

0 个答案:

没有答案