Login Queue
注釈:本資料はAI技術を用いて翻訳されています。
概要
AGS ログインキュー機能は、トラフィックが高い時期にプレイヤーの流入を管理するためのエレガントなソリューションを提供します。これらのイベントには、ゲームのローンチ、メジャーアップデート、またはピーク時間が含まれます。この機能は、サーバーの過負荷を防ぎ、サーバーを一度に圧倒するのではなく、徐々にゲームへのアクセスを許可することで、プレイヤーにとってよりスムーズな体験を保証します。
ゲーム業界では、この機能は一般的に「待機室」とも呼ばれています。
ログインキュー機能により、プレイヤーに現在の位置とキュー内の推定待ち時間を提供できます。これにより、より整理された予測可能な体験が提供されます。
以下は、人気ゲームのログインキューの例です:

ログインキューの設定
このセクションでは、ログインキューの設定方法とその仕組みについて学習します。
基本設定
ログインキューは、機能設定を行うことで、ゲーム名前空間ごとに有効化できます。ログインキューの設定は簡単です。ゲーム開発者が処理する必要がある重要なプロパティは2つだけです:
- 最大同時接続数: 同時にログインできるプレイヤーの最大数(例:1,000,000プレイヤー)。
AccelByte Gaming Service(AGS)共有クラウドの各ゲーム名前空間は、デフォルトで5,000 CCUに制限されています。AGS共有クラウドのゲームCCU制限を参照してください。
- 1秒あたりの最大ログイン率: アカウントシステムが1秒あたりに処理できるプレイヤーログインの最大数(例:1秒あたり500ログイン)。
詳細設定
2つの必須プロパティを設定した後、管理者は設定の有効化ボタンをクリックすることで、ゲームのログインキューを直接有効化できます。
特定の要件があり、ログインキューのより詳細なカスタマイズが必要な場合、AGSはいくつかの詳細プロパティ設定を提供します。一般的に、これらはデフォルト値で設定されますが、必要に応じて変更できます。
-
安全マージン: 最大同時接続数に達する前にキューをトリガーするマージン。例えば、最大同時接続数が1,000,000に設定されている場合、5%の値は、同時接続数が950,000プレイヤーに達したときにキューが開始されることを意味します。
-
クールダウン: ログインキューが有効になっている場合、ゲームはキューを無効化する前に、トリガーなしでこの時間が経過するのを待ちます。例えば、300秒。これは、ログインキューが頻繁に有効化または無効化されるのを防ぎたいためです。また、ログインキューのパフォーマンスを向上させ、不要なリソースコストを削減します。
-
キュー再接続猶予期間: プレイヤーがキュー内の位置を失う前に再接続するための期間。プレイヤーが猶予期間中に再接続した場合、最後に知られている位置に挿入されます。例えば、位置500にいて再接続した場合、位置500に戻ります。
-
プレイヤー再接続猶予期間: ログイン済みのプレイヤーが切断またはサインオフしたときにキューに入れられる前に、ゲームに再接続するための期間。完全にログインしていた場合、キューの位置ゼロ(つまり、キューの先頭)に戻ります。
-
ポーリング時間: ゲームクライアントがプレイヤーのキュー情報を更新するための最大期間。
除外設定
ログインキューをスキップしたり、特定のユーザーアカウントをキューの先頭に挿入したりする場合もあります。以下の設定オプションは、これらのシナリオ用に設計されています。
-
除外アカウント: ログインキューから除外する必要がある複数の特定のアカウント。例えば、管理アカウント、QAアカウント、またはVIPアカウント。
-
除外IAMクライアント: ログインキューから除外する必要がある特定のアプリケーション。例えば、ゲーム用のWebポータルを作成し、そのWebサイトにサインインするときにプレイヤーをキューに入れたくないが、ゲームクライアントではそうしたい場合。
除外IAMクライアント機能は、AccelByte Gaming Service(AGS)共有クラウドでは利用できず、AGSプライベートクラウドでのみ利用可能です。
サンプルユースケース
多数のプレイヤーが同時にログインしようとすると、ゲームサーバーに大きな負担がかかる可能性があります。AGSログインキューは流入を管理し、サーバーのクラッシュや不安定性を防ぎ、すべての人にとってゲーム体験に悪影響を与える可能性があります。以下はサンプルユースケースです:
-
ゲームローンチ:
シナリオ:待望のゲームがローンチされ、何千人ものプレイヤーがログインしてプレイを開始することを熱望しています。
ユースケース:サーバーの過負荷を防ぐためにログインキューを実装し、スムーズなローンチを保証し、プレイヤーが徐々にゲームに入ることを許可します。
-
メジャーアップデートリリース:
シナリオ:ゲームが新機能、コンテンツ、または修正を含む重要なアップデートをリリースします。これにより、変更を体験したいプレイヤーの急増が引き起こされます。
ユースケース:サーバーの不安定性を回避し、すべてのプレイヤーに公平なエントリーを提供するために、アップデートの最初の数時間にログインキューを有効化できます。
-
特別イベントまたはプロモーション:
シナリオ:ゲームが特別なゲーム内イベントまたはプロモーションを開催し、多数のプレイヤーの参加を引き付けます。
ユースケース:ログインキューを使用して、増加したプレイヤーアクティビティを管理し、サーバーのクラッシュを防ぎ、すべての人がイベントに参加する公平な機会を持つことを保証します。
-
無料プレイ週末:
シナリオ:ゲームが無料プレイ週末を提供し、ゲームを試すプレイヤーの突然の流入が発生します。
ユースケース:一時的なプレイヤー数の増加に対応するために、ログインキューを実装してサーバーを圧倒することを回避し、安定したゲーム体験を維持します。
-
サーバーメンテナンス:
シナリオ:予定されたサーバーメンテナンスまたはアップデートが進行中で、メンテナンスが完了した後、プレイヤーがログインしようとしています。
ユースケース:メンテナンス後にゲームに戻るプレイヤーの最初のラッシュを管理するためにログインキューを使用します。これにより、サーバーの不安定性が防止されます。
-
ピーク時間:
シナリオ:1日の特定のピーク時間に、多数のプレイヤーが同時にログインします。
ユースケース:着信プレイヤーの負荷を均等に分散し、ピーク時のサーバーの負担を防ぐために、ログインキューを使用してアクセスを調整します。
インタラクション
このセクションでは、さまざまなログインキュー機能の使用方法について説明します。
キューへのプレイヤーの追加
ログインキューは、ゲーム名前空間へのユーザー認証の最初のログインステップです。これは、認証の直後、法的文書の確認などの他の処理の前に発生します。
プレイヤーがキューにいる間、最小限の権限セットを持っています。基本的に、キューに入っているプレイヤーが実行できる唯一のアクションは、ログアウトまたはキューのキャンセルです。これにより、ログインプロセスが中止され、キュー内のスポットが解放されます。
キューに入っているプレイヤーは、キュー内の位置とキューから出るまでの推定待ち時間を認識できます。これはAGSによって自動的に処理されます。
ログインキューの有効化
ログインキュー設定を設定したら、複数の自動トリガーによってログインキューを有効化できます:
- 自動トリガー1:同時接続数が設定された最大同時接続数から安全マージンを引いた値に達すると、ログインキューが有効になります。
- 自動トリガー2:1秒あたりの最大ログイン率に達すると、ログインキューが有効になります。
ログインキューの無効化
ログインキューは、これらの基準の両方が満たされたときに無効になります:
- 基準1:クールダウン中に自動有効化トリガーのいずれも満たされない。
- 基準2:キューがゼロに達する。
現在の位置と推定待ち時間の表示
キューが有効になっている場合、プレイヤーは同時接続数が最大同時接続数を下回るまで待つ必要があります。キューは、ログイン率と等しい最大レートでログインを処理しています。
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 ログイン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ログインキューのキャンセル 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 ログイン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がいくつかあります。以下はすべてのログインキューAPIです:
メールでログイン
LoginWithEmailV4(string email, string password, ResultCallback<TokenData, OAuthError> loginCallback);
LoginWithEmailV4(string email, string password, LoginWithEmailV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
デバイスIDでログイン
LoginWithDeviceIdV4(ResultCallback<TokenData, OAuthError> loginCallback);
LoginWithDeviceIdV4(LoginV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
他のプラットフォームでログイン
LoginWithOtherPlatformV4(PlatformType platformType, string platformToken, ResultCallback<TokenData, OAuthError> loginCallback);
LoginWithOtherPlatformV4(PlatformType platformType, string platformToken, LoginWithOtherPlatformOptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
他のプラットフォームIDでログイン
LoginWithOtherPlatformIdV4(string platformId, string platformToken, ResultCallback<TokenData, OAuthError> loginCallback);
LoginWithOtherPlatformIdV4(string platformId, string platformToken, LoginWithOtherPlatformOptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
リフレッシュトークンでログイン
LoginWithRefreshTokenV4(string refreshToken, ResultCallback<TokenData, OAuthError> loginCallback);
LoginWithRefreshTokenV4(string refreshToken, LoginV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
ゲームトークンの生成
GenerateGameTokenV4(string code, ResultCallback<TokenData, OAuthError> loginCallback);
GenerateGameTokenV4(string code, LoginV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
ヘッドレスアカウントの作成とレスポンストークン
CreateHeadlessAccountAndResponseTokenV4(string linkingToken, bool extendExp, ResultCallback<TokenData, OAuthError> loginCallback);
CreateHeadlessAccountAndResponseTokenV4(string linkingToken, bool extendExp, LoginV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
プラットフォームリンクとログインによる認証
AuthenticationWithPlatformLinkAndLoginV4(string email, string password, string linkingToken, ResultCallback<TokenData, OAuthError> loginCallback);
AuthenticationWithPlatformLinkAndLoginV4(string email, string password, string linkingToken, LoginV4OptionalParameters optionalParams, ResultCallback<TokenData, OAuthError> loginCallback);
2FAコードの検証
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 ログインキューのキャンセル 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: ログインキューはパブリッシャー名前空間で利用できますか?
A: いいえ、ログインキューはゲーム名前空間でのみ利用可能です。
Q: AGSは、ゲームクライアント側でプレイヤーに合計キューサイズ、現在のキュー位置、および推定待ち時間を提供しますか?
A: いいえ、AGSはゲームクライアント側でプレイヤーの現在のキュー位置と推定待ち時間のみを返して表示します。
Q: ログインキューは、新しいユーザー作成のためのユーザー作成エンドポイントをゲートしますか?
A: いいえ、ログインキューはゲーム名前空間でのユーザーログインのみをゲートします。