HTTPS要求にファイルをパイプしているのに、正常に動作しますが、99.9%の呼び出しが発生しますが、サーバーやネットワークが利用できない場合があります。node.jsストリームパイプによるタイムアウト処理
これは明らかに作業し、手動で再起動を必要とする停止する自分のアプリケーションを引き起こす...
ノードのドキュメント上で示唆したように、私は、時折今requestオブジェクトに次のエラーコードを使用して、その常に完全にハングアップするために使用される他のhttps接続を持っています:
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!");
});
...宛先がファイルストリームにパイプされている場合は、リクエストのタイムアウトが無視されるようですが、ファイルシステムオブジェクトのタイムアウトでエラーを処理する必要がありますが、イベントIがある場合はドキュメントが明確ではありませんあなたがハングアップしてみたい場合は
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秒後にタイムアウトするはずですが、...
問題は、tansferが終了したときにも 'end'が出力されることです。中断したりタイムアウトしたりするだけでなく、エラーを検出する方法が必要です。 – gabry