Debugging Dedicated Servers Locally
Armada はまだ AGS Starter ティアではご利用いただけません。まもなく公開します!
概要
サーバーを Armada にアップロードする必要があるマネージドの専用サーバーとは異なり、ローカルの専用サーバーはローカルコンピュータで実行されます。これにより、Armada にビルドをアップロードすることなく専用サーバービルドをテストし、デバッグして、プロファイルできます。
目標
- Armada にローカルの専用サーバーを登録する方法を学ぶ。
- ローカルの専用サーバーでマッチメイキングを行う方法を学ぶ。
前提条件
このガイドを開始する前に、次の手順を完了する必要があります。
- 次の権限で専用サーバー用の IAM クライアントを設定する。
権限の名前 | アクション |
---|---|
NAMESPACE:{namespace}:DSM:SERVER | アップデート |
すべての専用サーバーが使用する 1 つの IAM クライアントを維持します。
専用サーバー実行ファイルを準備します。これは Linux アーキテクチャを使用して構築されます。
プロジェクト用の AccelByte Game SDK をインストールして設定します。AccelByte Game SDK はUnrealおよびUnityの両方で利用できます。
Armada にローカルの専用サーバーを登録する
ローカルの専用サーバーを Armada に登録するには、適切な SDK から次の API を呼び出します。これは、専用サーバーを統合した SDK になります。マネージドの専用サーバーの登録とは異なり、ローカルの専用サーバーの IP アドレスとポート、サーバー名を Armada に提供する必要があります。
マッチメイカーがローカルの専用サーバーを見つける手段であるため、サーバー名は特に重要です。
Armada にマネージドの専用サーバーを登録するのと同様に、専用サーバーがゲームセッションを開始する準備ができた後に、これらの API を呼び出してください。
- Unreal
- Unity
FString IpAddress = FString("https://127.0.0.1");
int32 Port = 7777;
FString ServerName = FString("my-awesome-game-server");
FRegistry::ServerDSM.RegisterLocalServerToDSM(IpAddress, Port, ServerName, FVoidHandler::CreateLambda([]()
{
// Do something if RegisterLocalServerToDSM 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 時間登録状態が続いた後、自動的に削除されます。または、管理者ポータルのローカルサーバーエントリーの横にある[Delete (削除)]ボタンをクリックして、セッションを削除することもできます。ただし、プログラムで実行する場合は、次の 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);
}));
AccelByteServerPlugin.GetDedicatedServerManager().DeregisterLocalServer(result =>
{
if (result.IsError)
{
// Do something if DeregisterLocalServer has an error
Debug.Log($"Error DeregisterLocalServer, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
// Do something if DeregisterLocalServer has been successful
}
});
ローカルの専用サーバーとのマッチメイキング
ローカルの専用サーバーを使用する主な利点は、マッチメイキングの使用が可能になる点です。これにより、プレイヤーがサーバーに接続されるため、ローカルでサーバーをデバッグしてプロファイルすることができます。以下の図は、ローカルの専用サーバーがマッチメーカーとゲームクライアントとどのように対話するかを表しています。
プレイヤーをローカルサーバーにマッチメイキングするには、先の手順で記録したサーバー名を入力します。
- Unreal
- Unity
FString GameMode = FString(""); //game mode is irrelevant to matchmaking into a local server
FString ServerName = FString("my-awesome-game-server");
FRegistry::Lobby.Connect();
FRegistry::Lobby.SetMatchmakingNotifDelegate(AccelByte::Api::Lobby::MatchmakingNotif.CreateLambda([](const FAccelByteModelsMatchmakingNotice& Result)
{
if (Result.Status == EAccelByteMatchmakingStatus::Done)
{
FString MatchId = Result.MatchId;
}
}));
FRegistry::Lobby.SendStartMatchmaking(GameMode, ServerName);
string gameMode = ""; //game mode is irrelevant to matchmake into a local server
String serverName = "my-awesome-game-server";
AccelBytePlugin.GetLobby().Connect();
AccelBytePlugin.GetLobby().StartMatchmaking(gameMode, serverName, result =>
{
if (result.IsError)
{
// Do something if StartMatchmaking has an error
Debug.Log($"Error StartMatchmaking, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
// Do something if StartMatchmaking has been successful
}
});
ローカルサーバーでは、ローカルマシン上でプレイヤーをマッチメイクすることができますが、自動的にポート転送を行うわけではありません。また、これらのプレイヤーがローカルサーバーに接続する場合のリレーとして機能するわけでもありません。マシンがルーター下にある場合でも、コード内のポート転送を処理する必要があります。
トラブルシューティング
シャットダウン後にローカルサーバーエントリーが残る
ローカルサーバーエントリーは 24 時間残った後、自動的に削除されます。サーバーエントリーを削除する場合は、管理者ポータルで手動で削除するか、ローカルの専用サーバーの登録解除 の手順に従ってプログラムで削除する必要があります。