セッション・オーバーライドによる外部専用ゲームサーバー管理統合の紹介
注釈:本資料はAI技術を用いて翻訳されています。
概要
AccelByte Gaming Services (AGS) の Session サービスを使用すると、任意の外部またはサードパーティの専用ゲームサーバー管理ツールとゲームを統合できます。AGS の Session サービスは、(セッションテンプレートの設定で指定された)最小人数のプレイヤーがすでにセッションに参加した時点で、専用サーバーをリクエストします。

AGS では、Extend Override を使用してデフォルトのセッション動作をオーバーライドできます。専用ゲームサーバー (DS) を AMS にリクエストする代わりに、Session サービスは Session Override アプリで設定した外部プロバイダーに DS をリクエストします。

この記事では、次の方法について説明します。
- Session 機能用の Extend Override アプリテンプレートを変更して、外部の専用ゲームサーバー管理と統合する
- AGS Admin Portal のセッションテンプレート設定内でカスタム専用ゲームサーバーソースを設定する
- 専用ゲームサーバーをリクエストする際に Session サービスの機能をオーバーライドする gRPC サーバーを作成する
- この記事の手順では、Google Cloud Platform を外部専用サーバープロバイダーとして統合するために AGS Session サービスをカスタマイズする方法を示しています。AWS Gamelift 統合に関するドキュメントは近日追加予定です。
- AGS の専用サーバー管理ツールである AccelByte Multiplayer Server (AMS) もご確認ください。AMS は、プレイヤーにできるだけ近い場所で専用ゲームサーバーを提供できる動的な専用ゲームサーバーマネージャーです。
前提条件
- AccelByte Gaming Services バージョン 3.76 以降の環境。
- Google Cloud Platform (GCP) アカウント。
- 以下の AGS コンポーネントに関する理解:
- セッションテンプレートの設定
- ゲームセッションの統合
- AGS における セッションのカスタマイズ
- AGS における AccelByte Multiplayer Server (AMS) との連携
API コントラクト
コントラクトに含まれる関数は以下のとおりです。
service SessionDsm{
rpc CreateGameSession(RequestCreateGameSession) returns (ResponseCreateGameSession);
rpc TerminateGameSession(RequestTerminateGameSession) returns (ResponseTerminateGameSession);
rpc CreateGameSessionAsync(RequestCreateGameSession) returns (ResponseCreateGameSessionAsync);
}
CreateGameSession
CreateGameSession は、クライアントまたはマッチメイキングが DS 管理プロバイダーに専用ゲームサーバーをリクエストするゲームセッションを作成する際に呼び出されます。
- C#
- Go
- Java
- Python
public override Task<ResponseCreateGameSession> CreateGameSession(RequestCreateGameSession request, ServerCallContext context)
{
...
}
func (s *SessionDSM) CreateGameSession(ctx context.Context, req *sessiondsm.RequestCreateGameSession) (*sessiondsm.ResponseCreateGameSession, error) {
...
}
@Override
public void createGameSession(RequestCreateGameSession request, StreamObserver<ResponseCreateGameSession> responseObserver) {
...
}
async def CreateGameSession(
self, request: RequestCreateGameSession, context: ServicerContext
) -> ResponseCreateGameSession:
...
CreateGameSessionAsync
CreateGameSession と同じ機能を実行しますが、非同期で実行されます。
- C#
- Go
- Java
- Python
public override Task<ResponseCreateGameSessionAsync> CreateGameSessionAsync(RequestCreateGameSession request, ServerCallContext context)
{
...
}
func (s *SessionDSM) CreateGameSessionAsync(ctx context.Context, req *sessiondsm.RequestCreateGameSession) (*sessiondsm.ResponseCreateGameSessionAsync, error) {
...
}
@Override
public void createGameSessionAsync(RequestCreateGameSession request, StreamObserver<ResponseCreateGameSessionAsync> responseObserver) {
...
}
async def CreateGameSessionAsync(
self, request: RequestCreateGameSession, context: ServicerContext
) -> ResponseCreateGameSessionAsync:
...
TerminateGameSession
TerminateGameSession は、ゲームセッションが削除される際に呼び出されます。
- C#
- Go
- Java
- Python
public override Task<ResponseTerminateGameSession> TerminateGameSession(RequestTerminateGameSession request, ServerCallContext context)
{
...
}
func (s *SessionDSM) TerminateGameSession(ctx context.Context, req *sessiondsm.RequestTerminateGameSession) (*sessiondsm.ResponseTerminateGameSession, error) {
...
}
@Override
public void terminateGameSession(RequestTerminateGameSession request, StreamObserver<StatCodesResponse> responseObserver) {
...
}
async def TerminateGameSession(
self, request: RequestTerminateGameSession, context: ServicerContext
) -> ResponseTerminateGameSession:
...
gRPC のリクエスト処理に関する詳細は こちら を参照してください。
専用ゲームサーバーのロジック
ゲームセッションのライフサイクルを専用ゲームサーバー (DS) の状態と同期させることが重要です。これにより、専用ゲームサーバーがすでに削除またはシャットダウンされている場合に、ゲームセッションがハングしたり(あるいはアクティブなままになったり)するのを防ぐことができます。DS がシャットダウンする際には、ゲームセッション削除エンドポイント を呼び出して関連するゲームセッションを削除することを推奨します。SDK 関数 も参照してください。
Extend アプリの設定、実行、テスト
サンプルとして、この構成では専用ゲームサーバーをデプロイする外部の場所として Google Cloud (GCP) の仮想マシンを使用します。
アプリテンプレートをクローンする
- C#
- Go
- Java
- Python
git clone https://github.com/AccelByte/session-dsm-grpc-plugin-csharp.git
git clone https://github.com/AccelByte/session-dsm-grpc-plugin-go.git
git clone https://github.com/AccelByte/session-dsm-grpc-plugin-java.git
git clone https://github.com/AccelByte/session-dsm-grpc-plugin-python.git
Google Cloud Platform を設定する
-
Google Cloud Platform (GCP) にログインします。
gcloud auth login -
service-key-accountを作成します。gcloud iam service-accounts keys create test.json --iam-account=xxxx@xxxx.iam.gserviceaccount.com -
GCP でのトラフィックのために、Virtual Private Cloud (VPC) でファイアウォールの IP アドレスとポートを許可します。
-
GCP で、サンプルゲーム DS の docker イメージ(アーティファクト)用のリポジトリを作成します。タグを追加し、DS を docker リポジトリにプッシュします。コマンドの例:
docker tag sampleds asia-southeast1-docker.pkg.dev/xxxx/xxxx/sampleds
docker push asia-southeast1-docker.pkg.dev/xxxx/xxxx/sampleds
- 統合時の問題を避けるため、GCP のインスタンス名は小文字にし、62 文字を超えないようにすることを推奨します。
- Docker 用の Artifact Registry への認証設定については Google のドキュメント を参照してください。
アプリとセッションテンプレートを設定する
-
GCP の認証情報を設定します。認証情報は JSON ファイルに保存し、GCP の呼び出しに使用する必要があります。コードスニペットでは
service-account-key.jsonという名前になっています。important許可すべきロールは、Compute Admin、Artifact registry reader、artifact registry writer、および service account user です。
-
.envファイルに環境変数を設定します。.env.templateはアプリテンプレートリポジトリにあります。AB_BASE_URL=https://prod.gamingservices.accelbyte.io # AGS 本番環境のベース URL
AB_CLIENT_ID='xxxxxxxxxx' # 前提条件セクションのクライアント ID
AB_CLIENT_SECRET='xxxxxxxxxx' # 前提条件セクションのクライアントシークレット
PLUGIN_GRPC_SERVER_AUTH_ENABLED=false # アクセストークンと権限の検証を有効/無効にする
DS_PROVIDER='DEMO' # DS 実装を選択: DEMO または GCP
// GCP Config
GCP_SERVICE_ACCOUNT_FILE='./account.json' # JSON 形式の GCP サービスアカウントファイル
GCP_PROJECT_ID=xxxxx-xxxx # GCP プロジェクト ID
GCP_NETWORK=public # GCP ネットワークタイプ
GCP_MACHINE_TYPE=e2-micro # GCP インスタンスタイプ
GCP_REPOSITORY=asia-southeast1-docker.pkg.dev/xxxx/gcpvm # GCP リポジトリ
GCP_RETRY=3 # インスタンス取得の GCP リトライ回数
GCP_WAIT_GET_IP=1 # インスタンスの IP を取得するまでの GCP 待機時間(秒)
GCP_IMAGE_OPEN_PORT=8080 # 専用サーバーの開放ポート -
アプリ (gRPC) サーバーをローカルで実行するか、AGS Extend(AccelByte ホスティング)にデプロイします。
- gRPC サーバーをローカルで実行します。Session Dedicated Server Extend Override アプリテンプレート入門 の記事にある Test with AGS の手順に従ってください。
- アプリを AGS Extend にデプロイします。Session Dedicated Server Extend Override アプリテンプレート入門 の記事にある Deploy in AGS の手順に従ってください。
-
自分のネームスペースでセッションテンプレートの設定を行い、Server の設定を Custom にします。アプリをローカルで実行する場合、または自身のサーバーやクラウドにデプロイする場合は、Custom URL に gRPC アプリの公開 URL を入力します。アプリを AGS Extend にデプロイする場合は、AccelByte Hosted オプションを選択し、自分の Session Override App を選びます。

-
Custom Server で設定したセッションテンプレートを使ってゲームセッションを作成し、Session Override アプリをテストします。最小人数のプレイヤーがセッションに参加すると、GCP 上で専用ゲームサーバーがリクエストされ、起動します。
