서비스 품질(QoS) 알림을 사용하여 Azure에 대한 플레이어 대기 시간 측정

십여 개의 Azure 지역에 PlayFab 멀티 플레이어 서버를 배포할 수 있습니다. 이를 수행하는 방법은 두 가지입니다.

  1. 추가 지역은 중복성을 제공합니다. 단일 Azure 지역이 실패할 경우 플레이어는 다른 지역의 서버에 액세스할 수 있습니다.
  2. 추가 지역을 통해 플레이어는 "근처"에 있는 서버에 액세스할 수 있으며 짧은 대기 시간 연결을 제공합니다.

RequestMultiplayerServer를 호출할 때 PlayFab에서 요청을 수행하기 위해 사용하는 Azure 지역의 순위 목록을 지정합니다. PlayFab은 첫 번째 순위 지역을 사용하여 요청을 수행하려고 하지만, 해당 지역에 대기 중인 서버가 없거나 지역에 다른 오류가 있는 경우 목록의 아래에 있는 차선의 지역이 시도됩니다.

가능한 경우, 멀티 플레이어 서버를 요청하는 동안 사용되는 Azure 지역의 순위를 알리기 위해 플레이어 대기 시간 데이터를 사용해야 합니다. PlayFab은 이 작업에 도움이 되는 서비스 및 도구를 제공합니다.

서비스 품질 알림

PlayFab은 PlayFab 멀티 플레이어 서버에 의해 사용되는 모든 Azure 지역에서 알림을 운영합니다. 이러한 알림은 UDP 트래픽을 반영하며 UDP 전송의 대기 시간을 측정하기 위해 사용할 수 있습니다.

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

이는 플레이어 디바이스의 맥락에서 이러한 알림을 사용하는 일반적인 흐름입니다.

  1. 플레이어로 PlayFab에 로그인합니다. 이 작업은 일반적으로 LoginWithCustomID 또는 다른 로그인 API를 사용하여 수행됩니다.
  2. ListQoSServersForTitle을 호출합니다. 그러면 PlayFab의 QoS 알림에 호스트 이름을 제공하게 됩니다. 일반적인 구현에서 게임의 멀티 플레이어 메뉴 페이지에 이러한 절차가 발생할 수 있습니다.
  3. UDP 소켓을 만듭니다.
  4. QoS 서버에서 포트 3075에 단일 UDP 데이터그램을 전송합니다. 메시지 내용은 0xFFFF로 시작해야 합니다(1111 1111 1111 1111).
  5. 서버는 단일 데이터그램으로 응답합니다. 메시지 내용의 처음 2바이트가 0x0000으로 전환됩니다(0000 0000 0000 0000). 데이터그램 내용의 나머지 부분은 초기 ping에서 복사됩니다.
  6. UDP 메시지 전송과 응답 수신 간 시간을 측정합니다.

서비스 품질 SDK 사용

PlayFab C# SDKCPP(교차 플랫폼) SDK는 QoS ping 코드 구현을 제공합니다. SDK를 빌드하여 PC 게임에서 도우미 라이브러리로 사용하거나, C# NuGet 패키지를 참조하거나, 코드를 다른 플랫폼의 예시로 사용할 수 있습니다.

각 API는 각 지역에 대한 평균 ping 시간과 함께 정렬된 지역 목록을 포함하는 QosResult을(를) 반환합니다.

C#

C# SDK에서 사용할 수 있는 QoS API가 있습니다. WindowsRunnerCSharpClient 샘플 구현은 gsdkSamples 리포지토리에서 사용할 수 있습니다.

코드는 PlayFabQosApi.cs에 있습니다.

매개 변수:

  • timeoutMs- 각 ping 시도에 적용되는 시간 제한(밀리초)입니다(기본값: 250ms).
  • pingsPerRegion- 각 지역에 대해 수행하려는 ping 시도 횟수입니다(기본값: 10). 이 수를 늘리면 실행 시간이 늘어나지만 부정확한 결과가 발생할 가능성이 줄어듭니다.
  • degreeOfParallelism- 병렬로 만들 최대 ping 수입니다(기본값: 4). 이 수를 늘리면 실행 시간이 줄어들지만 이 수가 너무 크면 네트워크 경합으로 인해 부정확한 결과가 발생할 수 있습니다.
        public async Task<QosResult> GetQosResultAsync(
            int timeoutMs = DefaultTimeoutMs,
            int pingsPerRegion = DefaultPingsPerRegion,
            int degreeOfParallelism = DefaultDegreeOfParallelism)
        {

C++

PlayFab CPP(교차 플랫폼) SDK에서 사용할 수 있는 두 QoS API가 있습니다.

코드는 PlayFabQosApi.cpp에 있습니다.

매개 변수:

  • numThreads- 병렬로 만들 최대 ping 수입니다. 이 수를 늘리면 실행 시간이 줄어들지만 이 숫자가 너무 크면 네트워크 경합으로 인해 부정확한 결과가 발생할 수 있습니다.
  • timeoutMs- 각 ping 시도에 적용되는 시간 제한(밀리초)입니다(기본값: 250ms).
  // 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);