Integrating Dedicated Servers with the SDK
Armada はまだ AGS Starter ティアではご利用いただけません。まもなく公開します!
概要
このセクションでは、Armada 固有の AccelByte Server SDK との統合について説明します。
目標
- 専用サーバーのライフサイクルについて理解する。
- Armada に専用サーバーを登録するために適切な API 呼び出しを行う方法を説明する。
前提条件
このガイドを開始する前に、次の手順を完了する必要があります。
- 次の権限で専用サーバー用の IAM クライアントを設定する。
権限の名前 | アクション |
---|---|
NAMESPACE:{namespace}:DSM:SERVER | アップデート |
すべての専用サーバーが使用するために IAM クライアントを 1 つ維持します。
Linux アーキテクチャを使用して構築された、専用サーバー実行ファイルを準備します。
プロジェクト用の AccelByte Game SDK をインストールし、設定します。AccelByte Game SDK はUnrealおよびUnityの両方で利用できます。
- [Unreal SDK](/gaming-services/getting-started/setup-game-sdk/unreal-sdk/)
- [Unity SDK](/gaming-services/getting-started/setup-game-sdk/unity-sdk/)
専用サーバーのライフサイクル
Armada は、状態を使用して専用サーバーのライフサイクルを追跡します。次のような状態があります。
- [Creating (作成中)]:サーバーがスピンアップし、ゲームセッションの提供に必要なリソースをロードしています。
- [Ready (準備完了)]:サーバーはゲームセッションを提供する準備ができています。
- [Busy (ビジー)]:サーバーがゲームセッションを提供しています。
- [Unresponsive (応答なし)]:サーバーが 1 つ以上のヘルスチェックに失敗しました。
- [Removing (削除中)]:Armada がサービスからサーバーを削除しています。
次の図は状態の変化をわかりやすく表したものです。
注意:専用サーバーの登録が必要です。これは、専用サーバーがゲームセッションを提供するために、独自のアセット (ゲームレベルのメッシュなど) をロードする必要があるためです。このようなアセットをロードするのに必要な時間は、スタジオによって大きく異なります。専用サーバーがロードする時間を確保でき、ゲームセッションを提供する準備ができていることを Armada に告知できるよう、レジスターサーバー API が使用されます。その後、Armada は専用サーバーの状態を[Creating (作成中)]から[Ready (準備完了)]に変更します。
専用サーバーを Armada に登録する
サーバーが Armada によって作成されると、[Creating (作成中)]状態になります。この間、サーバーはゲームセッションを提供するために必要なすべてのアセットの初期化と読み込みを開始します。この間、サーバーは[Creation timeout (作成のタイムアウト)]の対象となり、タイムアウトを超えるとサーバーが自動的に削除されます。
サーバーによる読み込みが完了し、ゲームセッション提供の準備ができると、サーバーは各 API を呼び出して Armada に告知する必要があります。
- Unreal
- Unity
int32 Port = 7777;
FRegistry::ServerDSM.RegisterServerToDSM(Port, FVoidHandler::CreateLambda([]()
{
// Do something if RegisterServerToDSM has been successful
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if RegisterLocalServerToDSM has an error
UE_LOG(LogTemp, Log, TEXT("Error RegisterLocalServerToDSM, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);
}));
string ip = "https://127.0.0.1";
uint port = 7777;
string name = "my-awesome-game-server";
AccelByteServerPlugin.GetDedicatedServerManager().RegisterLocalServer(ip, port, name, result =>
{
if (result.IsError)
{
// Do something if RegisterLocalServer has an error
Debug.Log($"Error RegisterLocalServer, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
// Do something if RegisterLocalServer has been successful
}
});
ローカルの専用サーバーの検証
登録エンドポイントを呼び出したら、管理者ポータルにログインし、サイドバーの[Dedicated Server Management (専用サーバー管理)]セクションの[Server (サーバー)]ボタンをクリックします。
次のページでローカルサーバーを実行しているものを見ることができます。ローカルサーバーを調べるには、ローカルサーバータブ内の矢印ボタンをクリックします。
これで、ローカルサーバーのステータスを確認できます。
ローカルの専用サーバーの登録解除
ローカルの専用サーバーは、24 時間登録状態が続いた後、自動的に削除されます。または、管理者ポータルのローカルサーバーエントリーの横にある削除ボタンをクリックして、セッションを削除することもできます。ただし、プログラムで実行する場合は、それぞれの SDK から次の API を使用します。
- Unreal
- Unity
FString ServerName = FString("my-awesome-game-server");
FRegistry::ServerDSM.DeregisterLocalServerFromDSM(ServerName, FVoidHandler::CreateLambda([]()
{
// Do something if DeregisterLocalServerFromDSM has been successful
}), FErrorHandler::CreateLambda([](int32 ErrorCode, const FString& ErrorMessage)
{
// Do something if DeregisterLocalServerFromDSM has an error
UE_LOG(LogTemp, Log, TEXT("Error DeregisterLocalServerFromDSM, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);
}));
int portNumber = 7777;
AccelByteServerPlugin.GetDedicatedServerManager().RegisterServer(portNumber, result =>
{
if (result.IsError)
{
// Do something if RegisterServer has an error
Debug.Log($"Error RegisterServer, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
// Do something if RegisterSErver has been successful
}
});
登録が完了すると、専用サーバーは[Ready (準備完了)]状態になります。作成のタイムアウトの対象でなくなり、ゲームセッションが要求するまで待機します。
トラブルシューティング
このセクションでは、サービスを使用する際に発生する可能性のある一般的なエラーや問題、およびそれらの解決方法に関する推奨事項を説明します。
数分後に専用サーバーがアクティブでなくなるのはなぜですか。
専用サーバーで起こる可能性があるクラッシュを除いて、専用サーバーが特定のタイムアウトを超過するとアクティブでなくなることがあります。専用サーバーがアクティブでなくなった理由を調べるには、次の手順に従ってください。
サイドバーの履歴ログボタンをクリックします。
履歴ログで専用サーバーセッションを見つけ、[View (表示)]をクリックします。
サーバーの割り当てと状態変更ログは、画面の右側にあります。
サーバー登録の API 呼び出しが失敗したのはなぜですか。
SDK の設定が間違っている可能性があります。SDK の設定ファイルを確認して、次のことを確認してください。
- 設定の[Client Id (クライアント ID)]と[クライアントの秘密]値が専用サーバーの IAM クライアントと一致している。
- 設定の[Base URL (ベース URL)]値が正しい。
- 設定の名前空間値が、専用サーバーがアップロードされた名前空間と一致している。