PlayFab Party QoS 评估

PlayFab Party 执行后台服务质量 (QoS) 评估,以提供游戏对远程 Azure 资源的低延迟访问。 本文将概述游戏应用 Party 的 QoS 功能的核心场景。

了解何时评估 QoS

Party 库在初始化 Party 后立即开始评估 QoS。 Party 成功评估 QoS 后,刷新评估的唯一方法就是清理并重新初始化 Party 库。 如果评估 QoS 失败,Party 库将在下次调用 PartyManager::CreateNewNetwork 时重试评估。

为 Party 网络选择区域

PlayFab Party 评估 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);

或者,游戏可以检查 Party 库的 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;
    }

区域价格差异

请记住,不会对所有 Party 区域进行同等收费。 有关区域价格差异的信息,请参阅定价页

为可访问的聊天功能使用最佳区域

PlayFab Party 评估 QoS 的另一个原因是启用响应性更强的聊天辅助功能:文本到语音合成、语音转文本听录和翻译。 这些辅助功能使用区域 Azure 认知服务资源,评估 QoS 可实现不同区域的最佳使用。

了解评估 QoS 失败

由于网络创建和聊天辅助功能依赖于 QoS 评估,因此检查 PartyRegionsChangedStateChange 的结果和错误详细信息很有价值。 此状态更改中的故障可能会为以后的故障提供有用的调试上下文。