用node.jsstreampipe道处理超时

我pipe道到一个HTTPS请求的文件,它可以正常工作99.9%的电话,但偶尔(可能当服务器或networking不可用)挂起无限期…

这显然导致我的应用程序停止工作,需要手动重新启动…

我有其他的HTTPS连接偶尔挂起,现在在请求对象上使用下面的错误代码,现在总是完成,如节点文档中所build议的:

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

…但是,如果目的地是通过pipe道传输到文件stream的话,请求超时似乎会被忽略,也许我应该在文件系统对象上处理一个超时的错误,但是文档不清楚是否有一个事件等待除了“完成”…

这里是示例代码,我希望有人能帮助我:

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

如果你想尝试挂起,改变主机path与一个巨大的文件,并在传输过程中断开网线,它应该超时10秒后,但它不…

我设置了一个演示node.js http服务器,发送一个非常慢的答案和客户端类似于您的示例代码。

当我启动客户端,然后在发送响应时停止服务器,然后我也没有在套接字上得到一个timeout事件,但我得到了在客户端响应end事件:

 var request = https.request(opts, function(response) { response.pipe(file); file.on('finish', function() { file.close(function(){ console.log("OK!"); }); }); response.on('end', function() { // this is printed when I stop the server console.log("response ended"); }); }); 

“`

也许你可以听到这个事件?