gpt4 book ai didi

Node.JS HTTP 请求超时

转载 作者:太空宇宙 更新时间:2023-11-03 22:38:24 27 4
gpt4 key购买 nike

我有一个应用程序需要对主 URL 和辅助 URL 发出 HTTP 请求。当主 URL 出现故障时,我需要能够妥善处理此问题并将故障转移到辅助 URL。我已经运行了故障转移功能,但遇到了处理超时的问题。

经过一番搜索,我发现 Node 没有默认超时,所以我设置了一个。我遇到的问题是,设置请求超时后,套接字保持打开状态。如果我销毁或中止请求,它会抛出一个错误,表明它退出得太早了。我知道我可以使用 req.on('error') 来处理这个问题,但如果需要的话,我希望能够将其用于其他错误处理。我尝试了几种方法来消磨时间。

第一个是在套接字上设置超时并销毁它。这会导致套接字挂起错误。

var req= https.request(options, function(res){
//Handle response based on return code
});


req.on('socket', function(socket){
socket.setTimeout(10000);
socket.on('timeout', function(){
socket.destroy();
self.emit("runAgain");
})
});

req.on('error', function(err){
console.log(err);
});

req.end();

我尝试的另一种方法是为请求设置超时。这导致了 ECONNRESET 错误。

req.setTimeout(100, function(){
req.destroy();
console.log('request destroyed');
})

我正在寻找处理此问题的最佳方法,这样我就不必设置超时,然后在可能的情况下捕获错误。

最佳答案

您可以订阅您自己发出的“runAgain”事件,也许保留一个计数器或其他东西:

self.madeSecondaryRequest = false;

self.on("runAgain", function() {
if(!self.madeSecondaryRequest) {
console.log("Hey I could make my request again!");
self.madeSecondaryRequest = true;
}
});

关于Node.JS HTTP 请求超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18647760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com