> ## 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.

# QoS 비콘을 사용하여 Azure에 대한 플레이어 지연 시간 측정

> PlayFab QoS 비콘을 사용하여 Azure 지역에 대한 플레이어 지연 시간을 측정하고, RequestMultiplayerServer 호출 시 낮은 지연 시간의 매치메이킹을 위해 지역 순위를 지정합니다.

# QoS(Quality-of-Service) 비콘을 사용하여 Azure에 대한 플레이어 지연 시간 측정

PlayFab 멀티플레이어 서버를 12개가 넘는 Azure 지역에 배포할 수 있습니다. 그렇게 하는 이유는 두 가지입니다.

1. 추가 지역은 이중화를 제공합니다. 단일 Azure 지역에 장애가 발생하는 경우 플레이어는 다른 지역의 서버에 액세스할 수 있습니다.
2. 추가 지역을 통해 플레이어는 "가까운" 서버에 액세스하고 낮은 지연 시간의 연결을 제공받을 수 있습니다.

[RequestMultiplayerServer](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.requestmultiplayerserver)를 호출할 때 PlayFab이 요청을 처리하는 데 사용하는 Azure 지역의 순위 지정 목록을 지정합니다. PlayFab은 1순위 지역을 사용하여 요청을 처리하려고 시도하지만, 해당 지역에 대기 중인 서버가 없거나 지역에 다른 결함이 있는 경우 목록 아래쪽에 있는 차선의 지역이 시도됩니다.

가능하면 멀티플레이어 서버를 요청하는 동안 사용되는 Azure 지역의 순위를 매길 때 플레이어 지연 시간 데이터를 사용해야 합니다. PlayFab은 이 작업을 지원하는 서비스 및 도구를 제공합니다.

## Quality-of-service 비콘

PlayFab은 PlayFab 멀티플레이어 서버가 사용 중인 모든 Azure 지역에서 비콘을 운영합니다. 이러한 비콘은 UDP 트래픽을 반사하며 UDP 전송을 사용하여 지연 시간을 측정하는 데 사용할 수 있습니다.

대부분의 멀티플레이어 게임은 성능이 가장 중요한 게임 트래픽에 UDP 전송을 사용하기 때문에 UDP 사용은 중요합니다. 인터넷 서비스 공급자 및 인터넷 에코시스템의 기타 요소는 UDP, TCP, ICMP 흐름에 대해 서로 다른 성능을 제공할 수 있습니다.

다음은 플레이어 디바이스의 컨텍스트에서 이러한 비콘을 사용하는 일반적인 흐름입니다.

1. 플레이어를 PlayFab에 로그인합니다. 일반적으로 [LoginWithCustomID](xref:titleid.playfabapi.com.client.authentication.loginwithcustomid) 또는 다른 로그인 API로 수행됩니다.
2. [ListQoSServersForTitle](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.listqosserversfortitle)을 호출합니다. 이는 PlayFab의 QoS 비콘에 대한 호스트 이름을 제공합니다. 일반적인 구현에서는 게임의 **멀티플레이어 메뉴** 페이지에서 이 절차를 수행할 수 있습니다.
3. UDP 소켓을 만듭니다.
4. QoS 서버의 포트 3075로 단일 UDP 데이터그램을 전송합니다. 메시지 내용은 0xFFFF(1111 1111 1111 1111)로 시작해야 합니다.
5. 서버는 첫 2바이트가 **0x0000**(0000 0000 0000 0000)으로 "뒤집힌" 메시지 내용의 단일 데이터그램으로 응답합니다. 나머지 데이터그램 내용은 최초 핑에서 복사됩니다.
6. UDP 메시지 전송과 응답 수신 사이의 시간을 측정합니다.

## Quality-of-service SDK 사용

PlayFab [C# SDK](https://github.com/PlayFab/CSharpSDK)와 [교차 플랫폼(CPP) SDK](https://github.com/PlayFab/XPlatCppSdk)는 QoS 핑 코드 구현을 제공합니다. SDK를 빌드하고 PC 게임에서 도우미 라이브러리로 사용하거나, C# NuGet 패키지를 참조하거나, 다른 플랫폼의 예제로 코드를 사용할 수 있습니다.

각 API는 각 지역에 대한 평균 핑 시간과 함께 정렬된 지역 목록이 포함된 `QosResult`를 반환합니다.

### C\#

[C# SDK](https://github.com/PlayFab/CSharpSDK)에서 사용할 수 있는 QoS API가 있습니다. 샘플 구현인 [WindowsRunnerCSharpClient](https://github.com/PlayFab/gsdkSamples/tree/master/WindowsRunnerCSharp#running-the-client)는 [gsdkSamples 리포지토리](https://github.com/PlayFab/gsdkSamples)에서 사용할 수 있습니다.

이 코드는 [*PlayFabQosApi.cs*](https://github.com/PlayFab/CSharpSDK/blob/master/PlayFabSDK/source/Qos/PlayFabQosApi.cs)에 있습니다.

매개 변수:

* `timeoutMs` - 각 핑 시도에 적용되는 시간 초과(밀리초)(기본값: 250ms).
* `pingsPerRegion` - 각 지역에 대한 핑 시도 횟수(기본값: 10). 이 수를 늘리면 실행 시간이 늘어나지만 부정확한 결과가 나올 확률이 줄어듭니다.
* `degreeOfParallelism` - 병렬로 수행할 최대 핑 수(기본값: 4). 이 수를 늘리면 실행 시간이 줄어들지만, 이 수가 너무 크면 네트워크 경합으로 인해 부정확한 결과가 발생할 수 있습니다.

```csharp theme={null}
        public async Task<QosResult> GetQosResultAsync(
            int timeoutMs = DefaultTimeoutMs,
            int pingsPerRegion = DefaultPingsPerRegion,
            int degreeOfParallelism = DefaultDegreeOfParallelism)
        {
```

### C++

[PlayFab 교차 플랫폼(CPP) SDK](https://github.com/PlayFab/XPlatCppSdk)에서 사용할 수 있는 두 개의 QoS API가 있습니다.

이 코드는 [*PlayFabQosApi.cpp*](https://github.com/PlayFab/XPlatCppSdk/blob/master/code/source/playfab/QoS/PlayFabQoSApi.cpp)에 있습니다.

매개 변수:

* `numThreads` - 병렬로 수행할 최대 핑 수. 이 수를 늘리면 실행 시간이 줄어들지만, 이 수가 너무 크면 네트워크 경합으로 인해 부정확한 결과가 발생할 수 있습니다.
* `timeoutMs` - 각 핑 시도에 적용되는 시간 초과(밀리초)(기본값: 250ms).

```cpp theme={null}
  // 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);
```


## Related topics

- [GDK의 서비스 품질 측정](/ko/build/console-features/networking/game-mesh/qos-networking.md)
- [멀티플레이어 게임을 호스팅하기 위한 PlayFab 멀티플레이어 서버 사용](/ko/services/playfab/multiplayer/servers/using-playfab-servers-to-host-games.md)
- [PlayFab Multiplayer 문서](/ko/services/playfab/multiplayer/index.md)
- [PlayFab Party features](/ko/services/playfab/multiplayer/networking/party-features.md)
- [XBOX 타이틀을 위한 Game Mesh 네트워킹](/ko/build/console-features/networking/game-mesh/index.md)
