この素晴らしいチュートリアルに従ってきました。Javascriptと関数型プログラミングに慣れていないので、ノンブロッキングが本質的に何を意味するのかを理解したかったのです。ブロッキング動作を実現するために、JSコードに意図的に10秒の「スリープ」を追加しました。
function route(pathname, handle)
{
console.log("About to route a request for :"+pathname);
if(typeof handle[pathname]==='function')
{
handle[pathname]();
}
else
{
console.log("No request handler for "+pathname);
}
sleep(10000);
console.log("Exiting router");
}
function sleep(milliSeconds)
{
var startTime = new Date().getTime(); // get the current time
while (new Date().getTime() < startTime + milliSeconds); // hog cpu
}
exports.route=route;
このコードは、ブラウザから呼び出している別の「サーバー」スクリプトからのコールバックとして使用されています。サーバースクリプトに対して100のリクエストを同時に実行すると、10秒後に100の応答が並行して返されると予想していました。ただし、このコードはリクエストを1つずつ実行します。これは確かにnode.jsの背後にある哲学に失敗しますよね?? これは、Javaサーブレットでこのような悪いコードを実行し、Tomcatで実行した場合でも発生しません。
このシナリオでのもう1つの観察結果は、リクエストが時系列で処理されなかったことです。つまり、リクエストはランダムに実行されます。これは私にはよく聞こえません!!
私のコードにはいくつかの問題があると思います-私の2つのクエリ(もう1つは年代学に関するもの)への回答とともに、ここでの概念を理解するのを手伝ってください。
ありがとう !