[英]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.