簡體   English   中英

Node.js未向服務器發送同步請求,錯誤EHOSTUNREACH

[英]Nodejs not sending a syn request to a server, error EHOSTUNREACH

我在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
    })
  })
}

我已經看到,有時在並發請求很多的情況下,在DNS失敗的Node中會發生這種情況。 該錯誤通常不是ECONNHOSTUNREACH錯誤,但感覺可能與之相關。

您的obj數組是否包含API服務的域名? 如果是這樣,請嘗試使用IP代替域名,然后查看問題是否仍然存在。 您可以通過以下方式進行此操作:

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

希望這可以幫助!

可能是您的請求泛濫,因此某些請求超時。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM