> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PlayFab Party QoS 测量

> PlayFab Party 如何使用 QoS 延迟测量为网络会话选择区域,以及游戏如何影响语音和数据的区域选择。

PlayFab Party 会执行后台服务质量(QoS)测量,以便为游戏提供对远程 Azure 资源的低延迟访问。以下将概述游戏应期望遇到 Party QoS 功能的核心场景。

## 了解何时测量 QoS

Party 库在 Party 初始化后立即开始测量 QoS。Party 成功测量 QoS 后,刷新这些测量的唯一方法是清理并重新初始化 Party 库。如果测量 QoS 失败,Party 库将在下次调用 [PartyManager::CreateNewNetwork](/services/playfab/multiplayer/networking/reference/classes/PartyManager/methods/partymanager_createnewnetwork) 时重试测量。

## 为 Party 网络选择区域

PlayFab Party 测量 QoS 的主要原因是使游戏在选择托管 Party 网络的 Azure 区域时能够使用延迟数据。

游戏无需等待检查 QoS 测量结果,可以使用空的首选区域列表调用 [PartyManager::CreateNewNetwork](/services/playfab/multiplayer/networking/reference/classes/PartyManager/methods/partymanager_createnewnetwork),在当前延迟最低的区域分配网络。

```cpp theme={null}
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](/services/playfab/multiplayer/networking/reference/classes/PartyManager/methods/partymanager_startprocessingstatechanges) 接收成功的 [PartyRegionsChangedStateChange](/services/playfab/multiplayer/networking/reference/structs/partyregionschangedstatechange)。

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

    // ...
}
```

然后调用 [PartyManager::GetRegions](/services/playfab/multiplayer/networking/reference/classes/PartyManager/methods/partymanager_getregions) 以检查和评估当前区域和延迟的列表。

```cpp theme={null}
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 区域的费用都相同。有关区域价格差异的信息,请参阅[我们的定价页面](https://playfab.com/pricing/)。

## 使用最佳区域实现无障碍聊天功能

PlayFab Party 测量 QoS 的另一个原因是启用响应更快的无障碍聊天功能:文本转语音合成、语音转文本转录以及翻译。这些无障碍功能使用区域性 Azure 认知服务资源,而测量 QoS 可实现对不同区域的最佳使用。

## 了解 QoS 测量失败

由于网络创建和无障碍聊天功能依赖于 QoS 测量,因此检查 [PartyRegionsChangedStateChange](/services/playfab/multiplayer/networking/reference/structs/partyregionschangedstatechange) 的结果和错误详细信息很有价值。此状态变更中的失败可能为以后的失败提供有用的调试上下文。


## Related topics

- [使用直接点对点连接](/zh-CN/services/playfab/multiplayer/networking/concepts-direct-peer-connectivity.md)
- [PlayFab Party 功能](/zh-CN/services/playfab/multiplayer/networking/party-features.md)
- [PlayFab Party 概览](/zh-CN/services/playfab/multiplayer/networking/index.md)
- [PlayFab Party 发行说明](/zh-CN/services/playfab/multiplayer/networking/release-notes.md)
- [使用多个 PlayFab Party 网络](/zh-CN/services/playfab/multiplayer/networking/concepts-multiple-networks.md)
