ポート80でリッスンしているサーバーは、複数のプロセスを処理できません。長年の単純なTCPデーモンは、一度に1つの接続しか処理できませんでした。この動作をエミュレートするnetcat
には、特定のポートでリッスンするようなプログラムを使用して、2つのマシンを接続しようとします。1つが入り、もう1つが接続なしで跳ね返ります。これらのデーモンはほとんど役に立たないので、それらはもう表示されません。
Webサーバーのようなものの場合、ポートで直接リッスンします。覚えておくべきことは、オペレーティングシステムのソケットライブラリの上にあるということです。新しい接続が確立されると、ソケットライブラリは新しいソケットをWebサーバーソフトウェアに渡します。その時点で、Webサーバーソフトウェアにはいくつかのオプションがあります。
1つの可能性は、ソケットオブジェクトを同じプロセス内の新しいスレッドに渡すことです。このソケットを介して通信が発生するたびに、このスレッドが処理します。親プロセスは、特定の時点でアクティブになっているスレッドを仲介します。
別の可能性は、新しいプロセスを起動し、ソケットオブジェクトをプロセスに渡すことです。私が理解しているように、これらの子プロセスとターゲットの間の通信を仲介するのは、オペレーティングシステムのソケットシステム次第です。親プロセスは、ハングしたプロセスの強制終了や他のプロセス間通信など、プロセスを制御できます。
これらのアプローチのどちらがより効率的かは、オペレーティングシステムによって異なります。IIRC、Apacheはどちらのモードでも実行できます。
本質的に、ソケットライブラリはWebサーバーに一定レベルの並列処理を提供します。新しい接続を受け入れながら、アクティブにデータを転送する複数の同時接続を処理できます。
ロード時間を改善するためにWebサーバーへの複数の接続試行をスピンアップできるブラウザーの場合、ブラウザー側にも並列処理が適用されます。これは素晴らしいことです。ブラウザーは、ページの読み込み中にページの状態を追跡し、スピンアップする複数の接続試行はすべてプロセスの一部です。
recv()
て各プロセスで試してください。