QoS(Quality-of-Service) 비콘을 사용하여 Azure에 대한 플레이어 지연 시간 측정
PlayFab 멀티플레이어 서버를 12개가 넘는 Azure 지역에 배포할 수 있습니다. 그렇게 하는 이유는 두 가지입니다.- 추가 지역은 이중화를 제공합니다. 단일 Azure 지역에 장애가 발생하는 경우 플레이어는 다른 지역의 서버에 액세스할 수 있습니다.
- 추가 지역을 통해 플레이어는 “가까운” 서버에 액세스하고 낮은 지연 시간의 연결을 제공받을 수 있습니다.
Quality-of-service 비콘
PlayFab은 PlayFab 멀티플레이어 서버가 사용 중인 모든 Azure 지역에서 비콘을 운영합니다. 이러한 비콘은 UDP 트래픽을 반사하며 UDP 전송을 사용하여 지연 시간을 측정하는 데 사용할 수 있습니다. 대부분의 멀티플레이어 게임은 성능이 가장 중요한 게임 트래픽에 UDP 전송을 사용하기 때문에 UDP 사용은 중요합니다. 인터넷 서비스 공급자 및 인터넷 에코시스템의 기타 요소는 UDP, TCP, ICMP 흐름에 대해 서로 다른 성능을 제공할 수 있습니다. 다음은 플레이어 디바이스의 컨텍스트에서 이러한 비콘을 사용하는 일반적인 흐름입니다.- 플레이어를 PlayFab에 로그인합니다. 일반적으로 LoginWithCustomID 또는 다른 로그인 API로 수행됩니다.
- ListQoSServersForTitle을 호출합니다. 이는 PlayFab의 QoS 비콘에 대한 호스트 이름을 제공합니다. 일반적인 구현에서는 게임의 멀티플레이어 메뉴 페이지에서 이 절차를 수행할 수 있습니다.
- UDP 소켓을 만듭니다.
- QoS 서버의 포트 3075로 단일 UDP 데이터그램을 전송합니다. 메시지 내용은 0xFFFF(1111 1111 1111 1111)로 시작해야 합니다.
- 서버는 첫 2바이트가 0x0000(0000 0000 0000 0000)으로 “뒤집힌” 메시지 내용의 단일 데이터그램으로 응답합니다. 나머지 데이터그램 내용은 최초 핑에서 복사됩니다.
- UDP 메시지 전송과 응답 수신 사이의 시간을 측정합니다.
Quality-of-service SDK 사용
PlayFab C# SDK와 교차 플랫폼(CPP) SDK는 QoS 핑 코드 구현을 제공합니다. SDK를 빌드하고 PC 게임에서 도우미 라이브러리로 사용하거나, C# NuGet 패키지를 참조하거나, 다른 플랫폼의 예제로 코드를 사용할 수 있습니다. 각 API는 각 지역에 대한 평균 핑 시간과 함께 정렬된 지역 목록이 포함된QosResult를 반환합니다.
C#
C# SDK에서 사용할 수 있는 QoS API가 있습니다. 샘플 구현인 WindowsRunnerCSharpClient는 gsdkSamples 리포지토리에서 사용할 수 있습니다. 이 코드는 PlayFabQosApi.cs에 있습니다. 매개 변수:timeoutMs- 각 핑 시도에 적용되는 시간 초과(밀리초)(기본값: 250ms).pingsPerRegion- 각 지역에 대한 핑 시도 횟수(기본값: 10). 이 수를 늘리면 실행 시간이 늘어나지만 부정확한 결과가 나올 확률이 줄어듭니다.degreeOfParallelism- 병렬로 수행할 최대 핑 수(기본값: 4). 이 수를 늘리면 실행 시간이 줄어들지만, 이 수가 너무 크면 네트워크 경합으로 인해 부정확한 결과가 발생할 수 있습니다.
C++
PlayFab 교차 플랫폼(CPP) SDK에서 사용할 수 있는 두 개의 QoS API가 있습니다. 이 코드는 PlayFabQosApi.cpp에 있습니다. 매개 변수:numThreads- 병렬로 수행할 최대 핑 수. 이 수를 늘리면 실행 시간이 줄어들지만, 이 수가 너무 크면 네트워크 경합으로 인해 부정확한 결과가 발생할 수 있습니다.timeoutMs- 각 핑 시도에 적용되는 시간 초과(밀리초)(기본값: 250ms).
