【发布时间】:2013-09-05 23:54:04
【问题描述】:
我有一个应用程序需要对主要和次要 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');
})
我正在寻找处理此问题的最佳方法,这样我就不必设置超时,然后尽可能地捕获错误。
【问题讨论】:
标签: node.js