Quality-of-Service (QoS) ビーコンを使用して Azure へのプレイヤー遅延を測定する
PlayFab のマルチプレイヤー サーバーは、10 個以上の Azure リージョンにデプロイできます。これには 2 つの理由があります。- 追加のリージョンは冗長性を提供します。単一の Azure リージョンで障害が発生しても、プレイヤーは他のリージョンのサーバーにアクセスできます。
- 追加のリージョンにより、プレイヤーは「近く」のサーバーにアクセスでき、低遅延の接続が可能になります。
Quality-of-service ビーコン
PlayFab は、PlayFab マルチプレイヤー サーバーが使用しているすべての Azure リージョンでビーコンを運用しています。これらのビーコンは UDP トラフィックを反射し、UDP トランスポートによる遅延測定に使用できます。 UDP の使用は重要です。なぜなら、ほとんどのマルチプレイヤー ゲームは、パフォーマンスが最も重要なゲーム トラフィックに UDP トランスポートを使用するためです。インターネット サービス プロバイダーやその他のインターネット エコシステムの要素は、UDP、TCP、ICMP フローごとに異なるパフォーマンスを提供する場合があります。 プレイヤー デバイスのコンテキストでこれらのビーコンを使用する場合の一般的な流れは以下のとおりです。- プレイヤーを PlayFab にログインさせます。通常は LoginWithCustomID やその他のログイン API を使用します。
- ListQoSServersForTitle を呼び出します。これにより、PlayFab の QoS ビーコンのホスト名が提供されます。一般的な実装では、この手順はゲームの Multiplayer Menu ページで実行されます。
- UDP ソケットを作成します。
- QoS サーバーのポート 3075 に単一の UDP データグラムを送信します。メッセージの内容は 0xFFFF (1111 1111 1111 1111) で始まる必要があります。
- サーバーは単一のデータグラムで応答し、メッセージ内容の最初の 2 バイトが 0x0000 (0000 0000 0000 0000) に「反転」されます。データグラムの残りの内容は、最初の ping からコピーされます。
- UDP メッセージを送信してから応答を受信するまでの時間を測定します。
Quality-of-service SDK の使用
PlayFab の C# SDK と クロスプラットフォーム (CPP) SDK は、QoS ping コードの実装を提供します。SDK をビルドして PC ゲームのヘルパー ライブラリとして使用したり、C# NuGet パッケージを参照したり、他のプラットフォームのサンプルとしてコードを使用したりできます。 各 API はQosResult を返します。これには、各リージョンへの平均 ping 時間とともにリージョンのソート済みリストが含まれます。
C#
C# SDK では QoS API が利用できます。サンプル実装 WindowsRunnerCSharpClient は gsdkSamples リポジトリ にあります。 コードは PlayFabQosApi.cs にあります。 パラメーター:timeoutMs- 各 ping 試行に適用されるタイムアウト (ミリ秒単位) (デフォルト: 250 ミリ秒)。pingsPerRegion- 各リージョンに対して行う ping 試行の回数 (デフォルト: 10)。この数を増やすと実行時間が長くなりますが、不正確な結果になる可能性が減少します。degreeOfParallelism- 並列で行う ping の最大数 (デフォルト: 4)。この数を増やすと実行時間は短縮されますが、この数が大きすぎるとネットワークの競合により不正確な結果になる場合があります。
C++
PlayFab クロスプラットフォーム (CPP) SDK では 2 つの QoS API が利用できます。 コードは PlayFabQosApi.cpp にあります。 パラメーター:numThreads- 並列で行う ping の最大数。この数を増やすと実行時間は短縮されますが、この数が大きすぎるとネットワークの競合により不正確な結果になる場合があります。timeoutMs- 各 ping 試行に適用されるタイムアウト (ミリ秒単位) (デフォルト: 250 ミリ秒)。
