我将HTTPS请求输出到文件中,99.9%的请求都能正常工作,但偶尔会出现无限期挂起的情况(可能是因为服务器或网络不可用)...
显然,这会导致我的应用程序停止工作,并需要手动重启...
我有其他HTTPS连接,它们以前也会偶尔挂起,现在使用以下请求对象上的错误代码总是成功完成,如Node文档所建议的:
request.on('socket', function(socket) {
socket.setTimeout(10000);
socket.on('timeout', function() { request.abort(); });
});
request.on('error', function(e) {
// Handle the error...
console.error("FAILED!");
});
... 但是如果将目标管道到文件流中,似乎请求的超时时间被忽略了,也许我应该在文件系统对象上处理一个带有超时的错误,但是文档没有明确说明是否有除'finish'之外的事件需要等待...
以下是示例代码,希望有人能帮助我:
var https = require('https'),
fs = require('fs');
var opts = {
host: 'www.google.com',
path: '/',
method: 'GET',
port: 443
};
var file = fs.createWriteStream('test.html');
var request = https.request(opts, function(response) {
response.pipe(file);
file.on('finish', function() {
file.close(function(){
console.log("OK!");
});
});
});
request.on('socket', function(socket) {
socket.setTimeout(10000);
socket.on('timeout', function() { request.abort(); });
});
request.on('error', function(e) {
console.error("FAILED!");
});
request.end();
如果您想尝试挂起,更改主机和路径为一个巨大的文件,并在传输过程中断开网络电缆,它应该会在10秒后超时,但实际上没有...