こんにちは、アウゼンです 初歩的な質問で、恐縮ですが 「大きなファイルをレスポンスするようなものは、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) --