例: コネクション型設計

さまざまな方法で、システム上のコネクション型ソケット・サーバーを設計することができます。これらのプログラム例を使用して、独自のコネクション型設計を作成することができます。

別のソケット・サーバー設計も可能ですが、以下の例に示す設計が最も一般的です。

反復サーバー

反復サーバーの例では、 クライアント・ジョブとの間で生じるすべての着信接続とデータ・フローを、 単一のサーバー・ジョブが処理します。 accept() API が完了すると、 サーバーがトランザクション全体を処理します。このサーバーは開発は最も容易ですが、問題がいくつかあります。 サーバーは指定されたクライアントからの要求を処理しますが、 別のクライアントもサーバーに接続しようとする可能性があります。 こうした要求で listen() のバックログがいっぱいになって、 結局、一部の要求が拒否されることになります。

並行サーバー

並行サーバー設計では、システムは複数のジョブとスレッドを使用して着信接続要求を処理します。 並行サーバーの場合、このサーバーに同時に接続する、複数のクライアントが存在するのが普通です。

ネットワークに複数の並行クライアントがある場合は、 非同期入出力ソケット API を使用することをお勧めします。 これらの API は、複数の並行クライアントのあるネットワークで最高のパフォーマンスを発揮します。