中間で明示的にhttp応答を中止するにはどうすればよいですか? 私の場合、外部ソースから生成されたデータを提供しています。サービスを開始する前に、サイズ(コンテンツ長)を知っています。しかし、外部ソースが私に完全な内容を与える前に私にデータを送るのを止めれば、私はその要求を中止して、受信側でエラーイベントが引き起こされるようにしたい。nodejs:進行中にhttp応答を中止します
ここで簡単なコードは、サーバーの:
//server
var express = require('express');
var app = express();
app.use(function(req, res, next){
res.setHeader('Content-Length', 100);
res.writeHead(200);
res.write('1234567890');
setTimeout(function() { res.connection.destroy(); }, 500);
});
app.listen(8080);
と
//client
var http = require('http');
http.get('http://localhost:8080/', function(res){
var length = 0;
console.log('expected size: ', res.headers['content-length']);
res.on('data', function(chunk){ length += chunk.length; });
res.on('end', function(){ console.log('received: ', length); });
}).on('error', function(e){
console.log('error', e);
});
すべてがOKだったとして、クライアントの振る舞い接続がリセットされたというエラーを表示してはならないことが予想されますだけでも10バイトのうちかかわらず100を受け取った。
要求が実行できないことがわかっている場合、送信側で接続を中止する方法はありますか?私が見つけた1つの方法は、そのタイマー内で例外をスローすることです、その後受信者はエラーをログに記録しますが、私は例外をスローしたくありません。
Hmm。私はあなたがノードサーバーからそれを返す前に、外部ソースから完全なデータを取得する必要があると思います。 –
@RobertMoskalオプションではない、私はTCP接続を中止するために熱心に知っておく必要があります。私はそのような方法がないとは信じられません。私は実際には中止する必要があり、回避策や他の解決策はありません。 – Pavel