こんにちは、アウゼンです

初歩的な質問で、恐縮ですが
「大きなファイルをレスポンスするようなものは、node.jsに向かない」という話をよく耳にするのですが
どうして向かないのでしょうか?

下記のような500MBのファイルをレスポンスするソース(極端な例)で試してみましたが、fs.readFileもresponseもブロックする訳でもなく
どういうことなのか疑問に思っています。

var fs = require('fs');
var http = require('http');
http.createServer(function (req, res) {
    fs.readFile('/home/mongo/testdata500mb',function(err,data){
        console.log('responce start!!');
        res.writeHead(200, {'Content-Type': 'image/jpeg' } );
        res.end( data, 'binary' );
        console.log('responce end!!');
    });
}).listen(1337);

実際のところソースを動かして確認してみるとうまく動作しないという状況でした。
Apache benchで並行度(Concurrency Level)を1から4にあげていくと、3移行でリクエストが失敗してしまっています。
結果からはレスポンスが欠落しているように見えるのですが、これが向かない理由につながるのでしょうか?

Document Length:        524288000 bytes

Concurrency Level:      1
Complete requests:      1
Failed requests:        0
Time taken for tests:   44.293 seconds
Total transferred:      524288101 bytes
Requests per second:    0.02 [#/sec] (mean)
Time per request:       44292.662 [ms] (mean)
Time per request:       44292.662 [ms] (mean, across all concurrent 
requests)

Concurrency Level:      2
Complete requests:      2
Failed requests:        0
Time taken for tests:   88.648 seconds
Total transferred:      1048576202 bytes
Requests per second:    0.02 [#/sec] (mean)
Time per request:       88648.204 [ms] (mean)
Time per request:       44324.102 [ms] (mean, across all concurrent 
requests)

Concurrency Level:      3
Complete requests:      3
Failed requests:        2
Time taken for tests:   120.262 seconds
Total transferred:      1423542643 bytes
Requests per second:    0.02 [#/sec] (mean)
Time per request:       120262.109 [ms] (mean)
Time per request:       40087.370 [ms] (mean, across all concurrent 
requests)

Concurrency Level:      4
Complete requests:      4
Failed requests:        3
Time taken for tests:   120.590 seconds
Total transferred:      1422685724 bytes
Requests per second:    0.03 [#/sec] (mean)
Time per request:       120590.011 [ms] (mean)
Time per request:       30147.503 [ms] (mean, across all concurrent 
requests)

-- 



メールによる返信