Nodejs没有向服务器发送syn请求,错误EHOSTUNREACH

时间:2016-06-24 17:51:08

标签: javascript node.js networking

我已经在nodejs写了一个短程序,该程序应该将数据发送到服务器。不幸的是,这个程序失败了然而,有趣的是,我使用过wireshark来查看请求正在做什么,而且我没有看到与我所做的请求一样多的TCP SYN数据包。

该程序包含在此处。

//ServerTestv1.js

var request = require('request');
var grouper = require('./grouper'); //Placeholder program.

function sendSomething(obj){
  request.post(obj, function(error, response, body){
    if(response == undefined){ //This happens sometimes. I 'unno why.
      reject(error);
      console.log('Undefined POST Response, ' + error);
    } else if(response.statusCode != 201 ||  error){
      reject(error);
      console.log(error + response.statusCode + " " + response.body);
    } else if(response.statusCode == 201){
      resolve(body); //Resolves the returned object, with unqiue ID.
    }
  })
}

function inputParser(url, objArray){
  var pArray = [];
  for(var i = 0; i < objArray.length; i++){
    pArray.push(sendSomething(objArray[i]));
  }
  Promise.all(promArray).then(function(returnedValues){ //Handles the unique ID the server assigned to the object.
    var otherArray = [];
    for(var u = 0; u < returnedValues.length; u++){
      var relatedObj = {
        "value" : Math.random() * 10,
        "relatedTo" : returnedValues[i].identifier
      }
      otherArray.push(sendSomething(relatedObj));
    }
    Promise.all(otherArray).then(function(values){
      grouper.doSomething(values); //Placeholderfunction
    })
  })
}

2 个答案:

答案 0 :(得分:1)

我发现有时会出现这种情况,当有大量并发请求时,DNS会失败。该错误通常不是ECONNHOSTUNREACH错误,但感觉这可能是相关的。

您的obj数组是否包含API服务的域名?如果是,请尝试使用IP而不是域名,并查看问题是否仍然存在。您可以通过以下方式执行此操作:

require('dns').resolve4('domain.name', (err, addresses) => {
        ip = addresses[0];
    }
);

希望这有帮助!

答案 1 :(得分:-1)

可能是您充斥着请求,因此会对某些请求产生超时。

https://www.sitepoint.com/making-http-requests-in-node-js/ 可能有所帮助。