私は負荷の下でたくさんのコンテンツをディッシングするときにnodejの限界を理解しようとしています。具体的には、クライアントへの長い応答をストリーミングすることがブロックされるかどうかを知りたい。http応答ブロックnodejsをストリーミングしていますか?
私は非常に単純なテストセットアップを作成しました。ここでは、ノードがすべてのリクエストに対して、1GBのHTTPダウンロードから取得したストリームで応答します。私のコードは次のとおりです。
var http = require('http');
var fs = require('fs');
var iterator = 0;
http.createServer(function(req, res) {
console.log('req received ', iterator++);
var url = 'http://download.thinkbroadband.com/1GB.zip';
http.get(url, bigFile => {
res.writeHead(200, {
'content-type': 'application/zip',
'content-length': bigFile.headers['content-length'],
});
bigFile.pipe(res);
});
}).listen(8003);
私はこのノードサーバーを起動し、ブラウザのいくつかのタブでエンドポイントを押しました。興味深いのは、後の応答がただちにconsole.log('request received ', iterator++);
コードで記録されないということでした。代わりに、初期イベントが記録されるまでに5〜10秒の遅延があります。
http応答のストリーミングがブロックされている場合、最初のリクエストが完了するまで待機してから2番目のリクエストを受け入れる必要があるため、これは私にとっては奇妙です。もしストリーミングがブロックされなければ、リクエストされた直後にすべてのリクエストが記録されることが期待されます。
誰かがこれを説明できますか?
ここでもパフォーマンスについてのご意見をお待ちしております。ノードはおそらくこの種のもののために作られたものではないでしょう。ダウンロード速度は、複数の要求で本当に苦しんでいます。