次の方法で共有


サービスの品質 (QoS) ビーコンを使用して Azure に対するプレイヤー レイテンシを測定する

PlayFab マルチプレイヤー サーバーを十数か所の Azure リージョンに配置できます。 これを行うには以下の 2 つの理由があります。

  1. リージョンが追加され、冗長性が提供されます。 1 つの Azure リージョンで障害が発生した場合、プレイヤーは他のリージョンのサーバーにアクセスできます。
  2. リージョンの追加によってプレイヤーは「近くにある」サーバーにアクセスできるため、低遅延の接続が実現されます。

RequestMultiplayerServer を呼び出すときに、PlayFab が要求を処理するために使用する Azure リージョンのランク付きリストを指定します。 PlayFab はランクが 1 番のリージョンを使用して要求を処理しようとしますが、そのリージョンにスタンバイ サーバーがない場合やそのリージョンで障害が発生している場合に、リストで次に最適なリージョンを試行します。

可能であればいつでもプレイヤーの遅延データを使用して、マルチプレイヤー サーバーの要求時に使用される Azure リージョンのランキングを通知します。 PlayFab では、このタスクを支援するサービスとツールが提供されています。

サービスの品質ビーコン

PlayFab は PlayFab マルチプレイヤー サーバーで使用されているすべての Azure リージョンでビーコンを運用しています。 これらのビーコンは UDP トラフィックを反映しており、UDP トランスポートによる遅延を測定するために使用できます。

ほとんどのマルチプレイヤー ゲームでは最もパフォーマンスが重要なゲーム トラフィックで UDP トランスポートが使用されているため、UDP を使用することは重要です。 インターネット サービス プロバイダーやインターネット エコシステムの他の要素では、UDP と TCP と ICMP のフローに対して差別化されたパフォーマンスが提供されていることがあります。

プレイヤーのデバイスのコンテキストでこれらビーコンを使用するための一般的なフローを以下に示します。

  1. プレイヤーが PlayFab にログインします。 これは通常、LoginWithCustomID または別のログイン API を使用して行われます。
  2. ListQoSServersForTitle を呼び出します。 これにより、PlayFab の QoS ビーコンにホスト名が提供されます。 一般的な実装では、この手順はゲームの [マルチプレイヤー メニュー] ページで行われることがあります。
  3. UDP ソケットを作成します。
  4. 単一の UDP データグラムを QoS サーバーのポート 3075 に送信します。 そのメッセージの内容は 0xFFFF (1111 1111 1111 1111) で始まっている必要があります。
  5. サーバーは単一のデータグラムで応答し、そのメッセージの内容の最初の 2 バイトは 0x0000 (0000 0000 0000 0000) に「反転」されています。 データグラムの内容の残りの部分は、初回の ping からコピーされます。
  6. UDP メッセージを送信してから応答を受信するまでの時間を測定します。

サービス品質 SDK を使用する

PlayFab SDK C#クロスプラットフォーム (CPP) SDK は、QoS ping コードの実装を提供します。 SDK をビルドして PC ゲームでヘルパー ライブラリーとして使用することも、そのC# NuGet パッケージを参照したり、他のプラットフォーム用の例としてコードを使用することもできます。

各 API は、リージョンの並べ替えられた一覧と各リージョンへの平均 ping 時間を含む QosResult を返します。

C#

C# SDK で使用できる QoS API があります。 WindowsRunnerCSharpClient サンプル実装は、gsdkSamples リポジトリで使用できます。

このコードは、PlayFabQosApi.cs にあります。

パラメーター:

  • timeoutMs - 各 ping 試行に適用されるタイムアウト (ミリ秒) (既定値: 250 ミリ秒)。
  • pingsPerRegion - 各リージョンに対して実行する ping 試行回数 (既定値: 10)。 この数を増やすと実行時間が長くなりますが、不正確な結果になる可能性は低くなります。
  • degreeOfParallelism - 並列で実行する ping の最大数 (既定値: 4)。 この数を増やすと実行時間が短縮されますが、この数が大きすぎると、ネットワークの競合によって不正確な結果が発生する可能性があります。
        public async Task<QosResult> GetQosResultAsync(
            int timeoutMs = DefaultTimeoutMs,
            int pingsPerRegion = DefaultPingsPerRegion,
            int degreeOfParallelism = DefaultDegreeOfParallelism)
        {

C++

PlayFab クロスプラット フォーム (CPP) SDK で使用できる 2 つの QoS API を以下に示します。

このコードは、PlayFabQosApi.cpp にあります。

パラメーター:

  • numThreads - 並列で実行する ping の最大数。 この数を増やすと実行時間が短縮されますが、この数が大きすぎると、ネットワークの競合によって不正確な結果が発生する可能性があります。
  • timeoutMs - 各 ping 試行に適用されるタイムアウト (ミリ秒) (既定値: 250 ミリ秒)。
  // Runs a QoS operation asynchronously. The operation pings a set of datacenters and returns a result with average response times.
  std::future<QoSResult> GetQoSResultAsync(unsigned int numThreads, unsigned int timeoutMs = DEFAULT_TIMEOUT_MS);

  // Runs a QoS operation synchronously. The operation pings a set of datacenters and returns a result with average response times.
  QoSResult GetQoSResult(unsigned int numThreads, unsigned int timeoutMs = DEFAULT_TIMEOUT_MS);