気まぐれに、特急でルートを定義しました:
リーリーテストは次のとおりです。ブラウザのタブをN個開きます。
最初のタブを開いてlocalhost:3000/にアクセスします。
6秒以内に2番目のタブを開いてlocalhost:3000/にアクセスします。
最初のリクエストがres.sendにあることがわかります。 ( ) は、終了前の 2 回目のアクセスには応答しません。
console.log(++n); は、res.end への最初のアクセスが終わるまで 2 を出力しません
============= = =========マジックセパレータ===================================== ===
実験の修正、以下のコメントによると、上記の実験は同じブラウザの異なるタブで開かれました
が、異なるブラウザを使用しています。つまり、Google Chromeを使用してlocalhost:3000 /を開き、次に使用しますIE ブラウザで 6 秒以内に localhost:3000/ を開くと、前のリクエストは後続のリクエストをブロックしないため、次のような質問が表示されます。
最初の質問は、10,000 人のユーザーが 6 秒以内に同時にアクセスした場合、10,000 の接続を維持する必要がありますか? これは可能ですか?私は困惑している。
2 番目の質問、同じブラウザを開くとブロックされるのはなぜですか?
ノードのランタイムはシングルスレッドのイベントループを使用します。コード内の
setTimeout()
函数是一个阻塞操作,Node 只有一个线程执行setTimeout()
。因此其他的操作都在队列
で待機します。こちらを参照してください: http://www.nodebeginner.org/i...
これはブラウザの問題です
正しい解決策は次のとおりです:
https://github.com/tianyk/not...
Pu Lingに従ってコードが変更されました:
リーリーここで、コールバックが別のリクエスターに分散できるように、res がコールバックで処理されることに注意してください。
私が書き始めたコードは、タイマーで処理され、コールバックがパラメーターとして渡されることに注意してください。よくわかりません
Nodejs は理解できませんが、Nodejs は高い同時実行性を処理できると聞いたことがあります。見てみましょう。