NodeJS 我如何处理“连接ETIMEDOUT”错误时,网址是超载“瓶颈”?

zyfwsgd6  于 2023-06-29  发布在  Node.js
关注(0)|答案(3)|浏览(310)

我正在使用NodeJs发布请求。下面是我的代码:

var request = require('request');
var rp = require('request-promise');

async function sendRequest(obj){
 try{  // TRY STARTS HERE
var requestTarget = await rp({
          method: 'POST',
          uri: obj.url,
          headers: {
    "accept": "*/*",
    "accept-language": "en-US,en;q=0.9,ar-AE;q=0.8,ar;q=0.7",
    "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"99\", \"Google Chrome\";v=\"99\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"macOS\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "x-requested-with": "XMLHttpRequest",
    "cookie":obj.cookie,
    "Referer":obj.referer ,
    "Referrer-Policy": "strict-origin-when-cross-origin"
  },
          timeout:16000,
        body : obj.body
        }).then(
          (response)=>{
return response
          })
           // TRY ENDS HERE
}catch(error){ // catch STARTS HERE
  console.error( " error is :" +error);
}// catch ENDS HERE
console.log(" response is : "  +requestTarget);

}

不管怎样,我遇到了请求的问题:连接ETIMEDOUT时,我运行的代码,我不知道如何修复它。
什么原因会导致此错误?这个服务器怎么用?

qyzbxkaa

qyzbxkaa1#

ETIMEDOUT意味着服务器在给定的超时时间(在示例中为16秒)内没有响应您的请求。该错误可以在catch块中处理。

6jygbczu

6jygbczu2#

您的问题标题提到您认为您的目标服务器过载。在这种情况下可能会出现ETIMEDOUT错误。拒绝服务攻击?
在尝试出站连接的代码中,除了捕获错误、等待一段时间并重试之外,您没有太多可以做的事情。
理想情况下,每次连续捕获错误时,在重试之前都要等待两倍的时间。对于第一个等待,使用一秒钟。然后等待2、4、8、16等等。您希望给予目标服务器有机会通过它的连接队列工作,而敲打它会减慢该进程。
一分钟后,你应该给予。如果您有错误日志记录系统,请将错误提交到错误日志记录系统。如果你的服务是一个Web服务,你的客户端会收到一个500(一般服务器错误)、502(到上游服务器的网关坏了)或504(上游服务器超时),这取决于你的应用程序。
如果您还控制目标服务器,您可以弄清楚那里发生了什么。您可能需要更多的容量。或者一个流氓客户可能会对目标造成很大的打击。您的目标可能正在遭受拒绝服务攻击。
处理ETIMEDOUT错误是xxx中的一个难题。如果您的服务不是关键任务型的,并且这种情况不经常发生,您可以简单地向客户端发出500、502或504错误。但是,不要忘记记录错误:解决这种情况可能需要人为干预。

xpszyzbs

xpszyzbs3#

因为端口被阻塞,所以发生了错误。请检查端口是否已启用。

相关问题