Amazon GameLift Servers とゲームクライアント/サーバーのやり取り - Amazon GameLift Servers

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon GameLift Servers とゲームクライアント/サーバーのやり取り

Amazon GameLift Servers ホスティングソリューションのコンポーネントは、プレイヤーの需要に応じてゲームセッションを実行するために、特定の方法で相互に連携します。このトピックでは、ゲームサーバーが Amazon GameLift Servers マネージド EC2 フリート、セルフマネージド Amazon GameLift Servers Anywhere フリート、またはハイブリッドソリューションでホストされているときに、コンポーネントが相互に通信する方法について説明します。

ホスティングソリューションコンポーネントには、ゲームサーバー、Amazon GameLift Servers サービス、クライアント側のバックエンドサービス、ゲームクライアントが含まれます。ゲームサーバーは、Amazon GameLift Servers サーバー SDK を使用して Amazon GameLift Servers サービスと連携します。バックエンドサービスは、Amazon GameLift Serversサービス API ( AWS SDK の一部) を使用して、ゲームクライアントに代わってサービスとやり取りします。ゲームセッションに参加すると、ゲームクライアントはゲームセッションの一意の IP アドレスとポート番号を使用してゲームセッションに直接接続します。

連携図

次の図は、Amazon GameLift Servers サービスがプレイヤーの需要に応じてゲームサーバーの可用性のステータスを追跡し、ゲームセッションを開始できるように、ゲームホスティングコンポーネントがどのように相互に連携するかを示しています。

このトピックで説明されているように、主な連携に対するゲームクライアント/サーバーの動作。

連携の動作

以下のセクションでは、主な各種連携におけるイベントの順番について説明します。

ゲームサーバープロセスの初期化

スタートアップ時、ゲームサーバープロセスは Amazon GameLift Servers サービスとの通信を確立し、ゲームセッションをホストする準備ができている状態として報告します。

  1. ゲームサーバー実行可能ファイルの新しいプロセスが、ホスティングリソースで実行を開始します。

  2. ゲームサーバープロセスは、次のサーバー SDK オペレーションを順番に呼び出します。

    1. InitSDK() は、サーバー SDK を初期化し、サーバープロセスを認証して Amazon GameLift Servers サービスとの通信を確立します。

    2. ProcessReady() は、ゲームセッションをホストする準備状況を伝えます。この呼び出しは、ゲームクライアントがゲームセッションの接続に使用するプロセスの接続情報やその他の情報も報告します。

    次に、サーバープロセスは、Amazon GameLift Servers サービスからのプロンプトを待ちます。

  3. Amazon GameLift Serversは、サーバープロセスのステータスを ACTIVE に更新して、新しいゲームセッションをホストできるようにします。

  4. Amazon GameLift Servers は、サーバープロセスからヘルスステータスをリクエストするために onHealthCheck コールバックを定期的に呼び出すようになります。これらの呼び出しは、サーバープロセスがアクティブステータスのままでも続行されます。サーバープロセスは、1 分以内に正常か正常でないかを報告する必要があります。サーバープロセスが正常でないと報告した場合、または応答しない場合、ある時点で、Amazon GameLift Servers サービスは、サーバープロセスのアクティブステータスを変更し、ゲームセッションを開始するリクエストの送信を停止します。

ゲームセッションの作成

Amazon GameLift Servers サービスは、プレイヤーからのゲームをプレイするリクエストに応じて新しいゲームセッションを開始します。

  1. ゲームクライアントを使用しているプレイヤーがゲームセッションへの参加をリクエストします。ゲームがプレイヤー参加プロセスを処理する方法に応じて、ゲームクライアントはバックエンドサービスにリクエストを送信します。

  2. プレイヤー参加プロセスで新しいゲームセッションを開始する必要がある場合、バックエンドサービスは新しいゲームセッションのリクエストを Amazon GameLift Servers サービスに送信します。このリクエストは、サービス API オペレーション StartGameSessionPlacement() を呼び出します。(代わりに、バックエンドサービスは StartMatchmaking() または CreateGameSession() を呼び出す場合があります)。

  3. Amazon GameLift Servers サービスは、ステータスが PENDING の新しい GameSessionPlacement チケットを作成することで応答します。チケット情報がバックエンドサービスに返されるため、バックエンドサービスは配置チケットステータスを追跡し、プレイヤーがゲームセッションを開始できる状態になったタイミングを判断できるようになります。詳細については、「ゲームセッション配置のイベント通知を設定」を参照してください。

  4. Amazon GameLift Servers サービスは、ゲームセッション配置プロセスを開始します。ゲームセッションをホスティングしていないアクティブなサーバープロセスについて、どのフリートを調べ、それらのフリートを検索するかを特定します。使用可能なサーバープロセスが見つかると、Amazon GameLift Servers サービスは以下を実行します。

    1. ゲームセッション設定と、配置リクエストからのプレイヤーデータがある GameSession オブジェクトを作成し、ステータスを ACTIVATING に設定します。

    2. ゲームセッションを開始するようにサーバープロセスにプロンプトします。サービスは、サーバープロセスの onStartGameSession コールバックを呼び出し、GameSession オブジェクトを渡します。

    3. サーバープロセスのゲームセッション数を 1 に変更します。

  5. サーバープロセスは、onStartGameSession コールバック関数を実行します。サーバープロセスがプレイヤーの接続を受け入れる準備ができたら、サーバー SDK オペレーション ActivateGameSession() を呼び出し、プレイヤーが接続されるまで待機します。

  6. Amazon GameLift Servers サービスは、GameSession オブジェクトをサーバープロセスの接続情報 (ProcessReady() への呼び出しで報告されたもの) で更新し、ゲームセッションステータスを ACTIVE に設定します。また、GameSessionPlacement チケットステータスを FULFILLED に更新します。

  7. バックエンドサービスは DescribeGameSessionPlacement() を呼び出し、チケットのステータスを確認し、ゲームセッション情報を取得します。ゲームセッションがアクティブな場合、バックエンドサービスはゲームクライアントに通知し、ゲームセッションの接続情報を渡します。

  8. ゲームクライアントは、接続情報を使用して、ゲームサーバープロセスに直接接続し、ゲームセッションに参加します。

プレイヤーをゲームに追加する

ゲームはオプションとして、プレイヤーセッション使用し、ゲームセッションへのプレイヤー接続を追跡できます。プレイヤーセッションは個別に作成するか、ゲームセッション配置リクエストの一環として作成できます。

  1. バックエンドサービスはゲームセッション ID を使用してクライアント API オペレーション CreatePlayerSession() を呼び出します。

  2. Amazon GameLift Servers サービスは、ゲームセッションのステータスを確認し (ACTIVEである必要あります)、ゲームセッションで開いているプレイヤースロットを探します。スロットを利用できる場合、サービスは以下を実行します。

    1. 新しい PlayerSession オブジェクトを作成し、ステータスを RESERVED に設定します。

    2. プレイヤーセッション情報を使用してバックエンドサービスリクエストに応答します。

  3. バックエンドサービスは、プレイヤーセッション情報をゲームセッション接続情報と共にゲームクライアントに渡します。

  4. ゲームクライアントは接続情報とプレイヤーセッション ID を使用して、ゲームサーバープロセスに直接接続し、ゲームセッションの参加を要求します。

  5. ゲームクライアントからの参加試行に応じて、ゲームサーバープロセスは、サービス API オペレーション AcceptPlayerSession() を呼び出してプレイヤーセッション ID を検証します。サーバープロセスは接続を受け入れるか、または拒否します。

  6. Amazon GameLift Servers サービスは、次のいずれかを行います。

    1. 接続が許可されると、Amazon GameLift Servers は PlayerSession ステータスを ACTIVE に設定し、PlayerSession をゲームサーバープロセスに渡します。

    2. ゲームサーバープロセスが、元の CreatePlayerSession() リクエスト後、一定期間内にプレイヤーセッション ID に対して AcceptPlayerSession() を呼び出さない場合、Amazon GameLift Servers サービスは、 PlayerSessionステータスを TIMEDOUT に変更し、ゲームセッションのプレイヤースロットを再び開放します。

プレイヤーの削除

プレイヤーセッションを使用するゲームの場合、ゲームサーバープロセスはプレイヤーが切断されたときに Amazon GameLift Servers サービスに通知します。サービスはこの情報を使用してゲームセッションのプレイヤースロットのステータスを追跡し、新しいプレイヤーが開いているスロットを使用できるようにします。

  1. プレイヤーがゲームから切断されます。

  2. ゲームサーバープロセスは、失われた接続を検出し、サーバー SDK オペレーション RemovePlayerSession() を呼び出します。

  3. Amazon GameLift Servers サービスは、プレイヤーセッションステータスを COMPLETED に変更し、ゲームセッションのプレイヤースロットを再び開放します。

ゲームセッションをシャットダウンする

ゲームセッションの終了時、またはゲームセッションのシャットダウン時に、サーバープロセスは、ゲームセッションステータスを Amazon GameLift Servers サービスに通知します。

  1. ゲームサーバープロセスは、ゲームセッションを終了し、サーバー SDK オペレーション ProcessEnding() を呼び出してプロセスのシャットダウンを開始します。

  2. ゲームサーバープロセスは を呼び出しDestroy()てサーバー SDK をメモリから解放します。このステップは、テレメトリメトリクスがクラッシュ時に通常のプロセスの終了を報告しないようにするために必要です。

  3. Amazon GameLift Servers サービスは、以下を実行します。

    1. Amazon Simple Storage Service (Amazon S3) にゲームセッションログをアップロードします。

    2. ゲームセッションのステータスを TERMINATED に変更します。

    3. サーバープロセスのステータスを TERMINATED に変更します。

    4. ホスティングソリューションの設計方法に応じて、新しく利用可能なホスティングリソースが割り当てられ、新しいゲームサーバープロセスを実行します。