ログインキュー
注釈:本資料はAI技術を用いて翻訳されています。
概要
AGS ログインキュー機能は、トラフィックが集中する時間帯に大量のプレイヤーが流入する状況を管理するための洗練されたソリューションを提供します。こうしたイベントには、ゲームのローンチ、大規模アップデート、ピーク時間帯などが含まれます。この機能は、プレイヤーを段階的にゲームへアクセスさせることで、サーバーに一度に負荷が集中してしまうのを防ぎ、プレイヤーがよりスムーズに体験できるようにします。
ゲーム業界では、この機能は「待合室(waiting room)」と呼ばれることも一般的です。
ログインキュー機能では、プレイヤーに現在のキュー内での順番と推定待ち時間を提示できます。これにより、秩序立った予測しやすい体験を提供できます。
以下は、人気ゲームにおけるログインキューの例です。

ログインキューを設定する
このセクションでは、ログインキューの設定方法と、その仕組みについて説明します。
基本設定
ログインキューは、機能設定を行うことでゲームネームスペースごとに有効化できます。ログインキューの設定は簡単です。ゲーム開発者が扱う必要がある必須プロパティは、次の2つだけです。
- Max concurrency(最大同時接続数): 同時にログインできるプレイヤーの最大数(例: 1,000,000人)。
AccelByte Gaming Service (AGS) Public Cloud の各ゲームネームスペースは、デフォルトで25,000 CCUに制限されています。
- Max Login rate per second(1秒あたりの最大ログインレート): アカウントシステムが1秒間に処理できるプレイヤーログインの最大数(例: 1秒あたり500ログイン)。
高度な設定
これら2つの必須プロパティを設定した後、管理者は設定画面のActivateボタンをクリックすることで、そのゲームのログインキューを直接有効化できます。
特定の要件があり、ログインキューをより詳細にカスタマイズしたい場合、AGSはいくつかの高度なプロパティ設定を提供しています。基本的にはデフォルト値が設定されていますが、必要に応じて変更できます。
-
Safety Margin(セーフティマージン): 最大同時接続数に達する前にキューをトリガーするマージンです。例えば、最大同時接続数が1,000,000に設定されている場合、値が5%であれば、同時接続数が950,000人に達した時点でキューが開始されます。
-
Cool-Down(クールダウン): ログインキューが有効化されている場合、トリガーが発生しないままこの時間が経過すると、キューが無効化されます。例えば300秒です。これは、ログインキューが頻繁に有効化・無効化されるのを防ぐためです。また、ログインキューのパフォーマンスを向上させ、不要なリソースコストを削減する効果もあります。
-
Queue Reconnect Grace Duration(キュー再接続の許容時間): プレイヤーがキュー内の順番を失う前に再接続できる時間です。プレイヤーが猶予期間内に再接続した場合、直前まで保持していた順番に戻されます。例えば、順番が500だった場合、再接続すると再び順番500に戻ります。
-
Player Reconnect Grace Duration(プレイヤー再接続の許容時間): ログイン済みのプレイヤーが切断またはサインオフした後、キューに入れられるまでにゲームへ再接続できる時間です。完全にログインしていた場合、キューの順番0(つまりキューの先頭)に戻ります。
-
Polling Time(ポーリング時間): ゲームクライアントがプレイヤーのキュー情報を更新するまでの最大時間です。
免除設定
ログインキューをスキップしたい場合や、特定のユーザーアカウントをキューの先頭に挿入したい場合もあります。以下の設定オプションは、こうしたシナリオのために用意されています。
-
Exempted Accounts(免除アカウント): ログインキューから除外する複数の特定アカウントです。例えば、管理アカウント、QAアカウント、VIPアカウントなどです。
-
Exempted IAM Clients(免除IAMクライアント): ログインキューから除外する特定のアプリケーションです。例えば、ゲーム用のウェブポータルを作成しており、そのウェブサイトにサインインする際にはプレイヤーをキューに入れたくないが、ゲームクライアントについてはキューに入れたい場合などです。
Exempted IAM Clients機能は、AccelByte Gaming Service (AGS) Public Cloudでは利用できず、AGS Private Cloudでのみ利用可能です。
サンプルの使用例
多数のプレイヤーが同時にログインを試みると、ゲームサーバーに大きな負荷がかかる可能性があります。AGSログインキューは、こうした流入を管理し、サーバーのクラッシュや不安定化を防ぎ、すべてのプレイヤーのゲーム体験への悪影響を回避します。以下にサンプルの使用例をいくつか示します。
-
ゲームのローンチ:
シナリオ: 大きな期待が寄せられているゲームがローンチされ、数千人のプレイヤーがログインしてプレイを始めたいと考えています。
使用例: サーバーの過負荷を防ぐためにログインキューを導入し、スムーズなローンチを実現し、プレイヤーを段階的にゲームへ参加させます。
-
大規模アップデートのリリース:
シナリオ: ゲームが新機能、コンテンツ、修正を含む大規模なアップデートをリリースします。これにより、変更内容を体験したいプレイヤーが急増します。
使用例: サーバーの不安定化を回避し、すべてのプレイヤーに公平な参加機会を提供するために、アップデート直後の数時間だけログインキューを有効化できます。
-
特別イベントまたはプロモーション:
シナリオ: あなたのゲームで、多くのプレイヤーが参加する特別なインゲームイベントやプロモーションが開催されます。
使用例: ログインキューを使用して増加したプレイヤーのアクティビティを管理し、サーバーのクラッシュを防ぎながら、全員が公平にイベントへ参加できる機会を確保します。
-
無料プレイ期間の週末:
シナリオ: あなたのゲームが無料プレイ可能な週末を提供し、その結果、多数のプレイヤーが試しにプレイしようと押し寄せます。
使用例: プレイヤー数の一時的な増加に対応するため、ログインキューを導入してサーバーへの過負荷を回避し、安定したゲーム体験を維持します。
-
サーバーメンテナンス:
シナリオ: 予定されていたサーバーメンテナンスやアップデートが進行中で、メンテナンス完了後にプレイヤーが再ログインを試みています。
使用例: メンテナンス後にゲームへ戻ってくるプレイヤーの当初の殺到を管理するためにログインキューを使用します。これにより、サーバーの不安定化を防ぎます。
-
ピーク時間帯:
シナリオ: 1日のうち、特定の時間帯に多数のプレイヤーが同時にログインします。
使用例: ピーク時間帯に流入するプレイヤー負荷を均等に分散し、サーバーへの負荷を防ぐために、ログインキューを使用してアクセスを制御します。
インタラクション
このセクションでは、ログインキューの各種機能の使用方法について説明します。
プレイヤーをキューに追加する
ログインキューは、ゲームネームスペースへのユーザー認証における最初のログインステップです。これは認証の直後、かつ法的文書の確認など他の処理が行われる前に実行されます。
プレイヤーがキュー内にいる間、そのプレイヤーが持つ権限は最小限のセットのみです。基本的に、キュー内のプレイヤーが実行できる唯一のアクションは、ログアウトまたはキューのキャンセルです。これによりログインプロセスが中止され、キュー内の順番が解放されます。
キュー内のプレイヤーは、キュー内での自分の順番や、キューから抜けるまでの推定待ち時間を確認できます。これはAGSによって自動的に処理されます。
ログインキューを有効化する
ログインキューの設定を行った後、以下の複数の自動トリガーによってログインキューを有効化できます。
- 自動トリガー1: 同時接続数が、設定された最大同時接続数からセーフティマージンを引いた値に達すると、ログインキューが有効化されます。
- 自動トリガー2: 1秒あたりの最大ログインレートに達すると、ログインキューが有効化されます。
ログインキューを無効化する
以下の両方の条件が満たされると、ログインキューは無効化されます。
- 条件1: クールダウン中に、いずれの自動有効化トリガーも発生しなかった。
- 条件2: キューがゼロになった。
現在の順番と推定待ち時間を表示する
キューが有効化されている場合、プレイヤーは同時接続数が最大同時接続数を下回るまで処理を待つ必要があります。キューは、Login rateと同等の最大レートでログインを処理します。
AGS SDKとの統合
- Unreal Engine
- Unity Engine
Unreal OSSとの統合
ログインキューは、AccelByte OSSのログインAPIにシームレスに組み込まれています。ログインキュー機能が有効化されている場合、AccelByte OSSはすべてのキューイングと進行状況の処理を行い、ゲームタイトル側がリッスンしてUIを適切に更新できるよう更新情報を提供します。キューの先頭に達すると、ログインが完了し、OnLoginCompleteDelegateがトリガーされます。
ログインキュー機能が有効化されていない場合、ログインは通常通り機能し、OnLoginCompleteDelegateが即座にトリガーされます。

設定
ログインキューの動作は、DefaultEngine.iniファイルの[OnlineSubsystemAccelByte]セクションで調整できます。
LoginQueuePresentationThreshold
ログインキューの待ち時間は非常に短い場合があります。突発的に短い時間だけインゲームUIがトリガーされる事態を防ぐため、このしきい値を使用して、推定待ち時間がそれに見合う場合にのみAccelByteOnLoginQueuedデリゲートをトリガーさせることができます。
想定される待ち時間が短く許容範囲内(つまりこのしきい値未満)の場合、ゲームタイトル側はこれを通常のログインフローとして扱うことができます。
例:
[OnlineSubsystemAccelByte]
bEnabled=true
; trigger OnLoginQueued delegate if estimated wait time is longer than five seconds
LoginQueuePresentationThreshold=5
Unreal Login API
以下は、AccelByte OSSを使用してログインAPIを統合する方法です。
void AClassPlayerController::BeginPlay()
{
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto IdentityInterface = ABSubsystem->GetIdentityInterface();
int32 LocalUserNum = 0;
// Auto-detect the login methods based on the configuration
FOnlineAccountCredentialsAccelByte Credentials{};
// Login
IdentityInterface->AddOnLoginCompleteDelegate_Handle(LocalUserNum
, FOnLoginCompleteDelegate::CreateLambda(
[](int32 LocalUserNum, bool bLoginWasSuccessful, const FUniqueNetId& UserId, const FString& LoginError)
{
if (bLoginWasSuccessful)
{
// Do something when player successfully logs in
}
else
{
// Do something when player failed to log in
}
}));
IdentityInterface->Login(LocalUserNum, Credentials);
}
ログインキューAPIデリゲート
AccelByteOnLoginQueued
ログイン時、ログインキューが有効化されており容量に達している場合、プレイヤーはログインキューに入り、AccelByteOnLoginQueuedデリゲートがトリガーされます。
このデリゲートは、以下を含むTicketInfoを返します。
- チケットID
- キュー内の順番
- 推定待ち時間
- 再接続の有効期限
void AClassPlayerController::OnLoginQueued(int32 LocalUserNum, const FAccelByteModelsLoginQueueTicketInfo& TicketInfo)
{
UE_LOG(LogTemp, Log, TEXT("Login request for LocalUserNum %d is queued with Ticket Id: %s - Position: %d - EstimatedWaitingTime: %d - Expire Time: %d"), LocalUserNum, *TicketInfo.Ticket, TicketInfo.Position, TicketInfo.EstimatedWaitingTimeInSeconds, ReconnectExpiredAt);
// Do something when queued
}
void AClassPlayerController::BeginPlay()
{
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto IdentityInterface = ABSubsystem->GetIdentityInterface();
int32 LocalUserNum = 0;
IdentityInterface->AddAccelByteOnLoginQueued_Handle(LocalUserNum
, FAccelByteOnLoginQueuedDelegate::CreateRaw(this, &AClassPlayerController::OnLoginQueued));
}
AccelByteOnLoginQueuedは、推定待ち時間が設定内のLoginQueuePresentationThresholdより大きい場合にのみトリガーされます。
AccelByteOnLoginTicketStatusUpdated
AccelByte OSS内には、キュー内の順番を定期的に更新し、ゲームタイトル側がリッスンしてUIを適切に更新できるよう更新情報を提供するポーリング機構があります。
各ポーリングの際に、AccelByteOnLoginTicketStatusUpdatedがトリガーされます。
ポーリングが成功した場合、デリゲートは以下を含むTicketInfoを返します。
- チケットID
- キュー内の順番
- 推定待ち時間
- 再接続の有効期限
エラーが発生することは稀ですが、その場合は詳細がエラーメッセージに含まれます。
void AClassPlayerController::OnLoginTicketStatusUpdated(int32 LocalUserNum, bool bWasSuccessful, const FAccelByteModelsLoginQueueTicketInfo& TicketInfo, const FOnlineErrorAccelByte& Error)
{
if (bWasSuccessful)
{
// Do something when successful
}
else
{
// Do something when failed
}
}
void AClassPlayerController::BeginPlay()
{
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto IdentityInterface = ABSubsystem->GetIdentityInterface();
int32 LocalUserNum = 0;
IdentityInterface->AddAccelByteOnLoginTicketStatusUpdated_Handle(LocalUserNum
, FAccelByteOnLoginTicketStatusUpdatedDelegate::CreateRaw(this, &AClassPlayerController::OnLoginTicketStatusUpdated));
}
Unreal Login Queue APIをキャンセルする
ログインキューのプロセスは、いつでもキャンセルできます。
void AClassPlayerController::BeginPlay()
{
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto IdentityInterface = ABSubsystem->GetIdentityInterface();
int32 LocalUserNum = 0;
IdentityInterface->CancelLoginQueue(LocalUserNum);
}
ログインキューAPIキャンセルデリゲート
AccelByteOnLoginQueueCancelComplete
CancelLoginQueueプロセスが完了すると、AccelByteOnLoginQueueCancelCompleteデリゲートがトリガーされます。
void AClassPlayerController::OnLoginQueueCancelCompleted(int32 LocalUserNum, bool bWasSuccessful , const FOnlineErrorAccelByte& Error)
{
if (bWasSuccessful)
{
// Do something when successful
}
else ..
{
// Do something when failed
}
}
void AClassPlayerController::BeginPlay()
{
...
auto ABSubsystem = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
auto IdentityInterface = ABSubsystem->GetIdentityInterface();
int32 LocalUserNum = 0;
IdentityInterface->AddAccelByteOnLoginQueueCancelComplete_Handle(LocalUserNum
, FAccelByteOnLoginQueueCancelCompleteDelegate::CreateRaw(this, &AClassPlayerController::OnLoginQueueCancelCompleted));
}
Unityとの統合
ログインキューは、ログインAPIにシームレスに組み込まれています。ログインキュー機能が有効化されている場合、AGS Unity SDKはすべてのキューイングと進行状況の処理を行い、ゲームタイトル側がリッスンしてUIを適切に更新できるよう更新情報を提供します。キューの先頭に達すると、ログインが完了し、LoginCallbackがトリガーされます。
前提条件
ログインキューを使用するには、以下の参照を含める必要があります。
using AccelByte.Api;
using AccelByte.Core;
using AccelByte.Models;
以下の関数を使用して、AGSと連携するためのAPIクライアントを取得します。
var userWrapper = AccelByteSDK.GetClientRegistry().GetApi().GetUser();
ログインキューを設定する
更新イベントを取得するには、キャンセルイベントを取得し、ログインキューAPI内でキャンセルを実行します。各ログインキューAPIのオプションパラメータには、常に以下のパラメータが含まれます。
- CancellationToken: ポーリング機構をキャンセルするために使用できるトークンです。
- LoginTimeout: ログインキューが実行されている間、ポーリング機構でエラーが発生したり、処理が止まったりすることを避けるために、ログインタイムアウトをミリ秒単位で設定します。デフォルトではこの値は120秒であり、30秒未満には設定できません。
- OnQueueUpdateEvent: キュー内の順番を定期的に更新し、ゲームタイトル側がリッスンしてUIを適切に更新できるよう更新情報を提供するポーリング機構です。ポーリングが成功するたびに、このイベントがトリガーされます。このイベントは、以下を含む
LoginQueueTicketを返します。- チケットID
- キュー内の順番
- 推定待ち時間
- 再接続の有効期限
- OnCancelledEvent: このイベントは、キュー機構がキャンセルされたときにトリガーされます。
APIからのキャンセル追加や更新イベントの取得を行いたくない場合は、オプションパラメータを空のままにするか、パラメータ内にオプションパラメータを持たないオーバーライド関数を使用できます。
Unity Login API
この例は、AGS Unity SDKを使用してログインキューAPIを統合する方法を示しています。
string ticket;
CancellationTokenSource loginCts = new CancellationTokenSource();
// Set the optional parameter for login with email
// Each login method has each own optional parameter
LoginWithEmailV4OptionalParameters optionalParameters = new LoginWithEmailV4OptionalParameters()
{
OnQueueUpdatedEvent = queueTicketResult =>
{
// Do something when there is an update from the refresh queue ticket
ticket = queueTicketResult.Ticket ?? ticket;
},
OnCancelledEvent = () =>
{
// Do something when ticket is cancelled
},
// Set the login timeout into 60000 milliseconds or 60 seconds
LoginTimeout = new LoginV4Timeout(60 * 1000),
// Set the cancellation token that can be used to cancel the login queue process
CancellationToken = loginCts.Token
};
// Call login method that use Login Queue API
userWrapper.LoginWithEmailV4(Email
, Password
, optionalParameters
, result =>
{
if (result.IsError)
{
// Do something if the operation fails
Debug.Log("Login failed");
return;
}
// Do something if the operation succeeds
Debug.Log("Login successful");
});
ログインキューでサポートされているその他のログインキューAPIもいくつかあります。以下は、すべてのログインキューAPIです。
Login with Email
LoginWithEmailV4(string email, string password, ResultCallback<TokenData, OAuthError> loginCallback);
LoginWithEmailV4(string email, string password, LoginWithEmailV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
Login with Device Id
LoginWithDeviceIdV4(ResultCallback<TokenData, OAuthError> loginCallback);
LoginWithDeviceIdV4(LoginV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
Login with Other Platform
LoginWithOtherPlatformV4(PlatformType platformType, string platformToken, ResultCallback<TokenData, OAuthError> loginCallback);
LoginWithOtherPlatformV4(PlatformType platformType, string platformToken, LoginWithOtherPlatformOptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
Login with Other Platform Id
LoginWithOtherPlatformIdV4(string platformId, string platformToken, ResultCallback<TokenData, OAuthError> loginCallback);
LoginWithOtherPlatformIdV4(string platformId, string platformToken, LoginWithOtherPlatformOptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
Login with Refresh Token
LoginWithRefreshTokenV4(string refreshToken, ResultCallback<TokenData, OAuthError> loginCallback);
LoginWithRefreshTokenV4(string refreshToken, LoginV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
Generate Game Token
GenerateGameTokenV4(string code, ResultCallback<TokenData, OAuthError> loginCallback);
GenerateGameTokenV4(string code, LoginV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
Create Headless Account and Response Token
CreateHeadlessAccountAndResponseTokenV4(string linkingToken, bool extendExp, ResultCallback<TokenData, OAuthError> loginCallback);
CreateHeadlessAccountAndResponseTokenV4(string linkingToken, bool extendExp, LoginV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
Authentication with Platform Link and Login
AuthenticationWithPlatformLinkAndLoginV4(string email, string password, string linkingToken, ResultCallback<TokenData, OAuthError> loginCallback);
AuthenticationWithPlatformLinkAndLoginV4(string email, string password, string linkingToken, LoginV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
Verify 2 FA Code
Verify2FACodeV4(string mfaToken, TwoFAFactorType factor, string code, ResultCallback<TokenData, OAuthError> loginCallback);
Verify2FACodeV4(string mfaToken, TwoFAFactorType factor, string code, Verify2FACodeV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
Unity Login Queue APIをキャンセルする
Unityログインキュー機構のキャンセルをサポートするには、オプションパラメータの一部としてCancellationTokenとOnCancelledEventコールバックの両方を指定する必要があります。これらは、ログインキューを設定するで説明されているセットアッププロセスの中で設定します。
以下は、これらのオプションパラメータを設定し、ログインリクエストをキャンセルする方法を示す例です。
// Create a CancellationTokenSource to control cancellation
CancellationTokenSource loginCts = new CancellationTokenSource();
// Set the optional parameter for login with email
LoginWithEmailV4OptionalParameters optionalParameters = new LoginWithEmailV4OptionalParameters()
{
OnCancelledEvent = () =>
{
// Handle the cancellation event
Debug.Log("Login cancelled");
},
CancellationToken = loginCts.Token
};
// Initiate the login request using the Login Queue API
userWrapper.LoginWithEmailV4(Email
, Password
, optionalParameters
, result =>
{
if (result.IsError)
{
// Do something if the operation fails
Debug.Log("Login failed");
return;
}
// Do something if the operation succeeds
Debug.Log("Login successful");
});
進行中のログイン試行をキャンセルするには、先に作成したCancellationTokenSourceのCancel()メソッドを呼び出すだけです。これにより、キャンセルトークンがトリガーされ、OnCancelledEventコールバックが実行されます。
// Trigger login cancellation
loginCts.Cancel();
FAQ
Q: ログインキューはPublisherネームスペースで利用できますか?
A: いいえ、ログインキューはゲームネームスペースでのみ利用可能です。
Q: AGSは、ゲームクライアント側にキューの総サイズ、現在のキュー内順番、推定待ち時間を提供しますか?
A: いいえ、AGSはゲームクライアント側にプレイヤーの現在のキュー内順番と推定待ち時間のみを返し、表示します。
Q: ログインキューは、新規ユーザー作成のためのユーザー作成エンドポイントをゲートしますか?
A: いいえ、ログインキューはゲームネームスペース内のユーザーログインのみをゲートします。