Node.JS HTTP请求超时

我有一个应用程序,将需要对主要和辅助URL的HTTP请求。 当主要url发生故障时,我需要能够正常处理,并故障转移到辅助URL。 我已经运行了故障转移function,但是遇到处理超时的问题。

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

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

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; } });