PlayFab パーティー QoS の測定値

PlayFab Party は、バックグラウンドのサービス品質 (QoS) 測定を実行して、タイトルにリモート Azure リソースへの低待機時間アクセスを実現します。 ここでは、タイトルがパーティーの QoS 機能に遭遇することが想定される主要なシナリオについて説明します。

QoS が測定されるタイミングを理解する

パーティー ライブラリは、パーティーが初期化されるとすぐに QoS の測定を開始します。 パーティーが QoS を正常に測定後、これらの測定値を更新する唯一の方法は、パーティー ライブラリをクリーンアップして再初期化することです。 QoS の測定に失敗した場合、PartyManager::CreateNewNetwork を次回呼び出すと、パーティー ライブラリによって測定が再試行されます。

パーティー ネットワークのリージョンを選択する

PlayFab パーティーが QoS を測定する主な理由は、パーティー ネットワークがホストされている Azure リージョンを選択するときにタイトルが待機時間データを使用できるようにするためです。

QoS の測定結果の検査を待たずに、タイトルは PartyManager::CreateNewNetwork を呼び出し、優先リージョンの空のリストを指定して、待機時間が現在最も短いリージョンにネットワークを割り当てることができます。

uint32_t regionCount = 0;
const PartyRegion* regionList = nullptr;

PartyError error = PartyManager::GetSingleton().CreateNewNetwork(
    localUser,
    &networkConfiguration,
    regionCount,
    regionList,
    nullptr,
    nullptr,
    nullptr,
    nullptr);

または、タイトルはパーティー ライブラリの QoS 測定結果を検査し、タイトル固有の条件に基づいて優先リージョンの一覧を選択することもできます。

QoS の測定結果を調べるには、PartyManager::StartProcessingStateChanges から、PartyRegionsChangedStateChange が正常に受信されるまで待機します。

switch (stateChange->stateChangeType)
{
    case PartyStateChangeType::RegionsChanged:
    {
        auto regionsChanged = static_cast<PartyRegionsChangedStateChange*>(stateChange);
        if (regionsChanged.result == PartyStateChangeResult::Succeeded)
        {
            m_qosResultsReady = true;
        }
    }

    // ...
}

次に PartyManager::GetRegions を呼び出して、現在のリージョンと待機時間の一覧を調べて評価します。

if (m_qosResultsReady)
{
    uint32_t regionCount;
    const PartyRegion* regionList;

    PartyError error = PartyManager::GetSingleton().GetRegions(
        &regionCount,
        &regionList);
    if (PARTY_FAILED(error))
    {
        DEBUGLOG("PartyManager::GetRegions failed: %s\n", PartyManager::GetErrorMessage(error));
        return;
    }

    // Prevent Party from using Azure regions above some latency threshold.
    // The game is unplayable in those scenarios.
    std::vector<PartyRegion> filteredRegionList = OmitRegionsAboveMaxLatency(regionCount, regionList, maxLatency);

    error = PartyManager::GetSingleton().CreateNewNetwork(
        localUser,
        &networkConfiguration,
        filteredRegionList.size(),
        filteredRegionList.data(),
        nullptr,
        nullptr,
        nullptr,
        nullptr);
    if (PARTY_FAILED(error))
    {
        DEBUGLOG("PartyManager::CreateNewNetwork failed: %s\n", PartyManager::GetErrorMessage(error));
        return;
    }

リージョンごとの価格の違い

すべてのパーティー リージョンが均等に課金されるわけではないことに注意してください。 リージョンの価格の違いについては、価格ページを参照してください。

アクセシビリティの高いチャット機能に最適なリージョンを使用する

PlayFab パーティーで QoS を測定するもう 1 つの理由は、音声合成 (TTS) 、音声からテキストへの変換 (STT) 、翻訳など、より応答性の高いチャット アクセシビリティ機能を有効にするためです。 これらのアクセシビリティ機能はリージョンの Azure Cognitive Services リソースを使用しており、QoS を測定することでさまざまなリージョンを最適に使用できます。

QoS を測定する際のエラーについて

ネットワーク作成とチャットのアクセシビリティ機能は QoS 測定に依存するため、PartyRegionsChangedStateChange の結果とエラーの詳細を調べることが重要です。 この状態変更の失敗により、後で発生するエラーに対して役立つデバッグ コンテキストが提供される場合があります。