サーバー SDK を使用して、Amazon GameLift Servers をゲームサーバーに追加します。 - Amazon GameLift Servers

サーバー SDK を使用して、Amazon GameLift Servers をゲームサーバーに追加します。

このトピックでは、ゲームサーバーコードに追加する必要があるサーバー SDK 機能に関する一般的なガイダンスを提供します。この機能により、ゲームサーバープロセスは Amazon GameLift Servers サービスと通信できます。Amazon GameLift Servers マネージド EC2 フリート、マネージドコンテナフリート、または Anywhere フリートにデプロイする予定のゲームサーバーには、以下の手順を使用します。

ゲームサーバープロセスは Amazon GameLift Serversサービスと通信して、サービスから指示を受け取り、サーバープロセスのヘルスとゲームセッションのステータスを報告します。ゲームホスティングソリューションコンポーネント (ゲームサーバー、バックエンドサービス、ゲームクライアント、Amazon GameLift Servers) 間のインタラクションの詳細については、Amazon GameLift Servers とゲームクライアント/サーバーのやり取りを参照してください。

サーバー SDK の入手

ゲームをホストする準備を整えるには、サーバー SDK for Amazon GameLift Servers をゲームサーバープロジェクトに追加します。サーバー SDK には複数の言語が用意されています。サーバー SDK を含むゲームサーバーのツールサポートの詳細については、「Amazon GameLift Servers開発用ツールを取得する」を参照してください。

開発言語用サーバー SDK を github.com/amazon-gamelift からダウンロードします。サーバー SDK バージョン、プラグイン、その他の開発ツールのリポジトリがあります。

注記

Unreal Engine または Unity を使用して開発している場合は、これらのゲームエンジンのAmazon GameLift Serversプラグインをダウンロードします。サーバー SDK は組み込まれており、すぐに使用できます。詳細については、以下のリンクを参照してください。

サーバー SDK API リファレンス

サーバープロセスを初期化する

Amazon GameLift Servers サービスとの通信を確立し、ゲームサーバープロセスがゲームセッションをホストする準備ができたことを報告するコードを追加します。このコードは、Amazon GameLift Serversコードの前に実行する必要があります。

  1. InitSdk() を呼び出してAmazon GameLift Servers APIクライアントを初期化する。Amazon GameLift Servers マネージド EC2 フリートで実行するゲームサーバーを準備する場合は、パラメータなしでデフォルト InitSDK() (C++) (C#) (Unreal) (Go) を使用します。API クライアントは、Amazon GameLift Serversサービスへの接続を自動的に処理します。

    Amazon GameLift Servers Anywhere フリートで使用するゲームサーバーを準備する場合:

    次の ServerParametersInitSdk() を呼び出して Amazon GameLift Servers API クライアントを初期化します。

    • ゲームサーバーへの接続に使用される WebSocket の URL。

    • ゲームサーバーのホストに使用されるプロセスの ID。

    • ゲームサーバープロセスをホスティングするコンピューティングの ID。

    • Amazon GameLift Servers Anywhere コンピューティングを含むフリートの ID。

    • Amazon GameLift Servers オペレーション GetComputeAuthToken によって生成された認可トークン。

  2. サーバープロセスがゲームセッションをホストできる状態になったことを、サービスに通知します。ProcessReady() (C++) (C#) (Unreal) (Go) を次の ProcessParameters を使用して呼び出します。各ゲームサーバープロセスはProcessReady() を 1 回だけ呼び出す必要があります。

    • サーバープロセスが使用するポート番号。サーバープロセスはゲームセッションを開始すると、Amazon GameLift Servers サービスへのポートを提供し、ゲームセッション情報を更新します。ゲームはこの情報を取得してゲームクライアントに提供し、これを使用してサーバープロセスに接続してゲームセッションに参加できます。

    • Amazon GameLift Servers に保存させたいファイルの場所。これには、ゲームセッションログや、ゲームセッション中にサーバープロセスが生成するその他のファイルが含まれる場合があります。Amazon GameLift Serversは、これらのファイルをサーバープロセスが実行されているコンピューティングに一時的に保存しますが、これらはインスタンスがシャットダウンするまでのみ使用できます。これらのファイルにアクセスするには、[Amazon GameLift Servers コンソール] 経由または Amazon GameLift Servers API オペレーション GetGameSessionLogUrl() を呼び出します。

      Amazon GameLift Servers マネージドコンテナフリートで使用するゲームサーバーを準備する場合:

      コンテナフリートのログパラメータを指定する必要はありません。代わりに、ゲームセッションやその他のログデータを標準出力に送信します。コンテナフリートは、すべてのコンテナ標準出力をログストリームとして自動的にキャプチャします。

    • Amazon GameLift Serversがゲームサーバープロセスにメッセージまたはプロンプトを送信できるようにする次のコールバック関数。ゲームサーバーは、これらの関数を実装する必要があります。詳細については、 ProcessParameters(C++) (C#) (Unreal) (Go) を参照してください。

      • (オプション) onHealthCheck – Amazon GameLift Servers は、この関数を定期的に呼び出して、サーバーからヘルスステータスレポートをリクエストします。

      • onStartGameSession – Amazon GameLift Serversはクライアントのリクエスト CreateGameSession() に応じ、この関数を呼び出します。

      • onProcessTerminate – Amazon GameLift Servers はサーバープロセスを強制的に停止し、正常にシャットダウンさせます。

      • (オプション)onUpdateGameSession – Amazon GameLift Servers は、更新されたゲームセッションオブジェクトをゲームサーバーに配信するか、マッチバックフィルリクエストでステータスの更新を提供します。FlexMatchバックフィル機能にはこのコールバックが必要です。

    また、ゲームサーバーをセットアップして、所有または管理する他の AWS リソースに安全にアクセスできるようにすることもできます。詳細については、「Amazon GameLift Servers ホストされたゲームサーバーを他の AWS リソースに接続する」を参照してください。

(オプション) サーバープロセスの健全性を報告する

ゲームサーバーにコードを追加してコールバック関数 onHealthCheck() を実装します。Amazon GameLift Servers は定期的にこのコールバックメソッドを呼び出してヘルスメトリクスを収集します。このコールバック関数を実装する場合は、以下を実行します。

  • サーバープロセスのヘルスステータスを確認します。例えば、外部の依存関係でエラーが発生した場合にサーバープロセスを異常と報告できます。

  • 状態評価を完了し、60 秒以内にコールバックに応答します。Amazon GameLift Serversサービスがその時間内にレスポンスを受け取らない場合、自動的にサーバープロセスを異常とみなします。

  • ブール値を返します (正常の場合は true、異常の場合は false)。

ヘルスチェックコールバックを実装していないと、サーバーが応答しない場合を除き、Amazon GameLift Servers はサーバープロセスを正常とみなします。

Amazon GameLift Servers はサーバープロセスの健全性を利用して、異常のあるプロセスを終了し、リソースをクリアにします。サーバープロセスが異常と報告され続ける場合や、ヘルスチェックに 3 回連続して応答しない場合、サービス はプロセスをシャットダウンして新しいプロセスをスタートすることがあります。サービス は、フリートのサーバープロセスの健全性に関するメトリクスを収集します。

(オプション) TLS 証明書を取得する

TLS 証明書の生成が有効になっているフリートでサーバーが実行されている場合は、TLS 証明書を取得してゲーム クライアントとのセキュリティ保護ありの接続を確立し、クライアントサーバー通信を暗号化できます。証明書のコピーがインスタンスに保存されます。ファイルのロケーションを取得するには、GetComputeCertificate() (C++) (C#) (Unreal) (Go) を呼び出します。

ゲームセッションをスタートする

コールバック関数 onStartGameSession を実装するコードを追加します。Amazon GameLift Servers はこのコールバックを呼び出して、サーバープロセスでゲームセッションを開始します。

onStartGameSession 関数は GameSession オブジェクトを入力パラメータとして取得します。このオブジェクトには、最大プレイヤー数などの主なゲームセッション情報が含まれます。また、ゲームデータとプレイヤーデータを含めることもできます。この関数の実装は、以下のタスクを実行する必要があります。

  • GameSessionプロパティに基づいて、新しいゲームセッションを作成するためのアクションを開始します。少なくとも、ゲームサーバーは、サーバープロセスに接続するときにゲームクライアントがリファレンスするゲームセッション ID を関連付ける必要があります。

  • 必要に応じて、ゲームデータとプレイヤーデータを処理します。このデータは、GameSession オブジェクトにあります。

  • 新しいゲームセッションがプレイヤーを受け入れる準備が整ったら、 Amazon GameLift Serversサービスに通知します。サーバー API オペレーション ActivateGameSession() (C++) (C#) (Unreal) (Go) を呼び出します。呼び出しの成功に応じて、サービスはゲームセッションのステータスを ACTIVEに変更します。

(オプション) 新しいプレイヤーを検証する

プレイヤーセッションのステータスを追跡している場合は、新しいプレイヤーがゲームサーバーに接続するときにそのプレイヤーを検証するコードを追加します。Amazon GameLift Servers は現在のプレイヤーと利用可能なゲームセッションスロットを追跡します。

検証のために、ゲームセッションに参加しようとするゲームクライアントにはプレイヤーセッション ID が含まれている必要があります。Amazon GameLift Servers は、ゲームが StartGameSessionPlacement() または StartMatchmaking() を呼び出して新しいゲームセッションを開始すると、この ID を生成します。これらのリクエストでは、ゲームセッションのオープンスロットがプレイヤーセッション用に予約されます。

ゲームサーバープロセスがゲームクライアント接続要求を受信すると、プレイヤーセッション ID が付いた状態で AcceptPlayerSession() (C++) (C#) (Unreal) (Go) が呼び出されます。それに応じて、Amazon GameLift Servers は、プレイヤーセッション ID がゲームセッションで予約されているオープンスロットに対応していることを確認します。Amazon GameLift Servers がプレイヤーセッション ID を検証すると、サーバープロセスは接続を受け入れます。これで、プレイヤーはゲームセッションに参加できます。Amazon GameLift Servers がプレイヤーセッション ID を検証しない場合、サーバープロセスは接続を拒否します。

(オプション) プレイヤーセッションの終了を報告する

プレイヤーセッションのステータスを追跡している場合は、プレイヤーがゲームセッションの終了を Amazon GameLift Servers に通知するコードを追加します。このコードは、サーバープロセスが接続の切断を検出するたびに実行する必要があります。Amazon GameLift Servers はこの通知を使用して、ゲームセッションの現在のプレイヤーと使用可能なスロットを追跡します。

切断された接続を処理するには、対応するプレイヤーセッション ID が付いた状態で、コードに、サーバー API オペレーション RemovePlayerSession() (C++) (C#) (Unreal) (Go) を追加します。

ゲームセッションを終了する

サーバープロセスのシャットダウンシーケンスに、ゲームセッションの終了を Amazon GameLift Servers に通知するコードを追加します。ホスティングリソースをリサイクルして更新するため、ゲームセッションの完了後に各サーバープロセスをシャットダウンします。

サーバープロセスシャットダウンコードの開始時に、サーバー API オペレーション ProcessEnding() (C++) (C#) (Unreal) (Go) g を呼び出します。この呼び出しは、サーバープロセスがシャットダウン中であることを Amazon GameLift Servers に通知します。Amazon GameLift Servers はゲームセッションのステータスとサーバープロセスのステータスを TERMINATED に変更します。ProcessEnding() を呼び出した後は、プロセスが安全にシャットダウンされます。

サーバープロセスのシャットダウン通知に応答する

Amazon GameLift Servers サービスからの通知に応答してサーバープロセスをシャットダウンするコードを追加します。この通知は、サーバープロセスが異常を一貫して報告する場合、またはサーバープロセスが実行されているインスタンスが終了している場合に送信されます。Amazon GameLift Servers は、容量のスケールダウンイベントの一部として、またはスポットインスタンスの中断に応じてインスタンスを停止できます。スポットインスタンスの中断は 2 分間の通知を提供します。これにより、サーバープロセスがプレイヤーを適切に切断し、ゲーム状態データを保持し、その他のクリーンアップタスクを実行する時間が提供されます。

シャットダウン通知を処理するには、ゲームサーバーコードに次の変更を加えます。

  • コールバック関数 onProcessTerminate() (C++) (C#) (Unreal) (Go) を実装します。この関数は、サーバープロセスをシャットダウンするコードを呼び出します。

  • ゲームサーバーシャットダウンコードからサーバー API オペレーション GetTerminationTime() (C++) (C#) (Unreal) (Go) を呼び出します。Amazon GameLift Servers がサーバープロセスを中止する呼び出しを発行した場合、 GetTerminationTime()は予想終了時間を返します。

  • ゲームサーバーシャットダウンコードの開始時に、サーバー API オペレーション ProcessEnding() (C++) (C#) (Unreal) (Go) を呼び出します。この呼び出しは、サーバープロセスがシャットダウンしていることを Amazon GameLift Servers サービスに通知します。その後、サービスはサーバープロセスのステータスをTERMINATED に変更します。ProcessEnding() を呼び出した後は、プロセスが安全にシャットダウンされます。