この質問への懸念ように良い答えがすでに存在しているため、TCP/IPプロトコルを取り巻く一般的な概念との差が、私はいくつかの洞察を得ることを望んでいますnode.js http/netライブラリの特殊性。Node.jsのHTTP/NET - 接続と要求
ノードhttpサーバインスタンスでは、「要求」イベントと「接続」イベントの2種類のイベントに対してコールバックを登録できます。これらの後半は、ネットライブラリから継承され、「_connections」フィールドもあります。このフィールドは、サーバが現在持っている同時接続数をカウントします。
httpはステートレスなプロトコルなので、要求イベントと接続イベントの間には1対1の対応があるはずですが、そうではありません。私のデバッガで単純な「hello-world」サーバを踏んでいくと、リクエストイベントの数が接続イベント数を上回ることがわかりました。私はまた、ゼロにすることはない、何の呼び出しがサーバーに行われていないされていた(とプロセスはまったく一時停止された)場合でも、ということ.connectionsフィールドました。なぜ要求数が接続数に等しくないのか、response.end()の最後の呼び出しの後にサーバーが接続を開いたままにするのはなぜですか(応答バッファがフラッシュされ、接続が終了したとき)。
また、どのようにHTTP Serverの同時接続数は(つまり、キープアライブで何もしない)、これまで1よりも高くなるだろうか?リクエストは基本的にソケットでキューに入れられ、1つずつ処理されませんか?私はNodeが非同期であることを理解していますが、それはシングルスレッドのやり方で動作するとも考えました。
ありがとうございます!
あなたは必ずキープアライブは有効になっていませんか?これはNode.jsのデフォルトです。また、リクエストは1つずつ処理されますが、非同期イベントは混在する可能性があります。つまり、完全なリクエスト - 応答サイクルは100%同期していない可能性があります。 –