Platform SDK: DirectX

クライアント/サーバー セッション

DirectPlay のクライアント/サーバー セッションでは、1 台のコンピュータがサーバーとして指定される。このコンピュータは、ピアツーピアのネーム サーバーと同じく、列挙要求に応答したり、セッションに参加するコンピュータを制御したり、セッション状態を新たにセッションに参加したコンピュータにダウンロードしたり、プレーヤーとグループが作成されるたびに ID 番号を生成したりする。クライアント/サーバー モデルがピアツーピア モデルと異なる点は、セッションにおけるすべてのメッセージがサーバーを経由してルーティングされることである。

サーバー コンピュータは、アプリケーションの特別なバージョンを実行する。これをアプリケーション サーバーと言う。アプリケーション サーバーは、ゲームのマスタ状態を維持し、クライアント コンピュータが実行したアクションに応じてその状態を更新し、関連するイベントを個別のクライアントに通知することができる。アプリケーション サーバーは、サーバー プレーヤーという特別なプレーヤーを作成する。すべてのクライアントは、サーバー プレーヤーにメッセージを直接送信し、サーバー プレーヤーからメッセージを直接受信することができる。サーバー プレーヤーは、メッセージを受信すると、ほかのクライアント プレーヤーにメッセージを送信して、状態の変化を通知することができる。

次の図は、クライアント/サーバーの通信を示している。各コンピュータは、サーバーとのみ直接通信する。サーバーはメッセージをほかのクライアントに転送することができる。

クライアント コンピュータは、アプリケーションのクライアント バージョンを実行する。このバージョンは、ローカルな状態を維持し、その状態をサーバーからのメッセージに応じて更新し、ローカルなアクションが発生した場合にサーバーにメッセージを送信することができる。

クライアント/サーバーは 2 つの方法で実装できる。1 つは、ピアツーピアとクライアント/サーバーの混合である。この場合、各クライアント アプリケーションは、自らが利用可能なプレーヤーとグループ (サーバー プレーヤーを含む) の完全なリストを保持する。クライアント プレーヤーは、セッションに参加している任意のプレーヤーにメッセージを直接送信することができる。各プレーヤーまたはグループは、それ自体に関するデータ (名前やリモート データなど) を保持することができる。このデータは、変更があるたびに、すべてのコンピュータ上で更新される。ピアツーピアの状態伝達の利点をすべて活用できるだけでなく、サーバー プレーヤーも利用できる。しかし、プレーヤー対プレーヤーのデータの伝達を制御することはできない。プレーヤーとグループが作成および破棄されたり、またはそれらのデータが変更されたりする頻度によっては、クライアント コンピュータが着信メッセージで過負荷になる場合がある。このタイプのセッションは、プレーヤーが約 16 人以上になると対応が困難である。このセッションは、サーバー プレーヤーが存在し、すべてのメッセージがサーバーを経由してルーティングされ、サーバー プレーヤーがサーバーを通過するすべてのメッセージのコピーを受信するという点を除けば、ピアツーピア セッションとそれほど大きな違いはない。

もう 1 つの方法は、真のクライアント/サーバー モードである。各クライアント アプリケーションはサーバー プレーヤーとセッション内の自身のローカル プレーヤーだけを参照する。クライアント プレーヤーは、サーバー プレーヤーにのみメッセージを送信することができ、サーバー プレーヤーからのメッセージのみを受信することができる。アプリケーション サーバーは、すべてのクライアント上のすべてのプレーヤーを参照することができる。サーバーはクライアントからメッセージを受信すると、アプリケーションのマスタ状態を更新する方法と、その更新をクライアントに通知する方法を判断する。この方法では、クライアント アプリケーションはプレーヤーと各プレーヤーに関連するデータのリストを維持する必要がある。

次の図は、DirectPlay クライアント/サーバー セッションの内容を論理的に示したものである。

ピアツーピア セッションの場合と同じく、セッションのネットワーク アドレスはサーバーのネットワーク アドレスに対応する。コンピュータがセッションに参加するには、参加要求をサーバーに送信する。これに対し、サーバーはセッション状態を新しいコンピュータにダウンロードする。サーバーがセッションを離れると、セッションが終了する。

すべてのメッセージがサーバーを経由してルーティングされるため、サーバーは自動的にマルチキャスト サーバーとして機能することになる。