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

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

この記事では、以下の方法について説明します:
- 外部専用ゲームサーバー管理と統合するためのセッション機能用Extend Overrideアプリテンプレートの変更
- AGS Admin Portal内のセッションテンプレート設定でカスタム専用ゲームサーバーソースを設定
- 専用ゲームサーバーをリクエストする際にセッションサービス機能をオーバーライドするgRPCサーバーの作成
- この記事の手順では、外部専用サーバープロバイダーとしてGoogle Cloud Platformを統合するためにAGS Sessionサービスをカスタマイズする方法を示しています。AWS Gamelift統合のドキュメントは近日追加予定です。
- AccelByte Multiplayer Server(AMS)をご確認ください。これはAGSの専用サーバー管理ツールです。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がシャットダウンする際に、delete game sessionエンドポイントを呼び出して関連するゲームセッションを削除することをお勧めします。SDK関数も参照してください。
Extend Appのセットアップ、実行、テスト
サンプルとして、この設定では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 prod環境のベースURL
AB_CLIENT_ID='xxxxxxxxxx' # 前提条件セクションのClient ID
AB_CLIENT_SECRET='xxxxxxxxxx' # 前提条件セクションのClient Secret
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サーバーをローカルで実行します。セッション専用サーバーExtend Overrideアプリテンプレートの使用開始記事のTest with AGS手順に従ってください。
- アプリをAGS Extendにデプロイします。セッション専用サーバーExtend Overrideアプリテンプレートの使用開始記事のDeploy in AGS手順に従ってください。
-
ネームスペースでセッションテンプレート設定をセットアップし、サーバー設定をCustomに設定します。アプリをローカルで実行するか、独自のサーバーまたはクラウドにデプロイする場合は、Custom URLにgRPCアプリのパブリックURLを入力します。アプリをAGS Extendにデプロイする場合は、AccelByte Hostedオプションを選択し、Session Override Appを選択します。

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