以下のコードでnodeJSアプリケーションを起動し、ブラウザからhttp://localhost:3222/を起動すると、アプリケーションは応答を返すのに2000ms以上かかります。ビジネスロジックの実行に時間がかかる(2000ms)場合、nodeJSは同時リクエストを処理する方法
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(fib(40).toString());
}).listen(3222, '127.0.0.1');
function fib(n) {
if (n <= 1) {
return n;
}
return fib(n-1) + fib(n-2);
}
私はApacheベンチを使用してURLに同時にアクセスしようとしましたが、リクエストは同時に発生するのではなく深刻な方法で実行されていました。
>ab -n 3 -c 1 http://localhost:3222/
1724ms (longest request)
は深刻な方法で3要求を発生し、平均および最大時間に各採取1713msは1724ms
>ab -n 3 -c 3 http://localhost:3222/
5195ms (longest request)
が同時方法で3要求を焼成し、平均および最大時間に各採取3483msは5195msです。
上記のタイミングは、要求がノード・サーバーによって同時に実行されないことを明確に示しています。
私の質問は、これらのシナリオをプロダクションnodeJSアプリケーションでどのように扱うべきかです。
注:コードはあくまでも表現目的のためのものです。メインスレッドをブロックせずにnodeJSアプリケーションで時間のかかる複雑なビジネスロジックを処理する方法を知りたいと思います。