QoS
QoS(서비스 품질) 서비스는 사용 가능한 영역 중에서 클라이언트가 최적의 상태로 온라인 세션에 연결할 수 있는 영역을 동적으로 판단하는 데 사용됩니다.
Matchmaker에서는 게임 클라이언트가 매치메이킹 티켓의 각 플레이어에 대한 QoS 결과 정보를 제공합니다. QoS 결과에는 게임을 호스팅할 가능성이 있는 게임 서버 근처에 위치한 QoS 서버까지 클라이언트의 연결 품질에 대한 정보가 포함되어 있습니다. QoS 결과는 영역별로 정의되며 지연 시간과 패킷 손실 비율 값을 포함합니다. Matchmaker는 이 결과를 사용해 게임이 요구하는 연결 품질을 만족하는 지역 내에 있는 플레이어를 매칭합니다.
참고: QoS 결과에는 서버 IP가 포함되어 있습니다. 이 IP는 게임 서버 IP가 아니라 QoS 서버 IP입니다.
QoS 규칙
QoS 규칙은 티켓의 QoS 결과를 사용해 매치에서 요구하는 연결 품질의 수준을 정의합니다.
다음 예제를 살펴보십시오. 매치 내 모든 플레이어의 지연 시간이 100 미만이어야 합니다.
"MatchRules": [
{
"Name": "QoS",
"Type": "LessThanEqual",
"Source": "Players.QosResults.Latency",
"Reference": 100,
"Not": false,
"EnableRule": true
}
]
Relaxations
QoS 규칙을 사용할 때는 영역 내에 있는 플레이어 수가 적더라도 매치메이킹이 이루어질 수 있도록 완화를 적용해야 합니다.
다음 예제를 살펴보십시오. 여기서는 30초 후에 지연 규칙을 완화합니다.
"MatchRules": [
{
"Name": "QoS",
"Type": "LessThanEqual",
"Source": "Players.QosResults.Latency",
"Reference": 100,
"Not": false,
"EnableRule": true,
"Relaxations": [
{
"Type": "ReferenceControl.Replace",
"AgeType": "Oldest",
"Value": 150,
"AtSeconds": 30
}
]
}
]
Unity QoS SDK 사용
Unity는 서버 플릿(server fleet)의 QoS 계산을 간단하게 만들어 주는 SDK를 제공합니다. 다음 코드 스니핏은 게임 클라이언트에서 QoS 결과를 가져오는 방법을 보여 줍니다.
프로젝트의 Matchmaker가 다중 플릿을 지원하는 경우, 티켓의 QoS 결과에는 할당될 플릿의 QoS 정보만 포함되어야 합니다.
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", AuthenticationService.Instance.AccessToken);
var fleetId = "Multiplay fleet id"; // Replace this with the fleet Id;
// Fetch QoS result for the fleet
var qosResult = await GetSortedMultiplayQosResultsAsync(new List<string>{fleetId});
QoS 고려 사항
파티 매치메이킹과 QoS
한 티켓에 플레이어가 두 명 이상 있는 파티의 경우 몇 가지 방법으로 QoS 정보를 제공할 수 있습니다.
- 파티에 속한 여러 클라이언트가 각자의 QoS 결과를 제공한 다음 모든 값을 티켓에 더합니다.
- 파티에 속한 여러 클라이언트가 각자의 QoS 결과를 제공한 다음 QoS 결과의 평균값을 티켓에 더합니다.
- 파티 리더의 QoS 결과를 제공합니다.
허용 가능한 QoS 제한 결정
대부분의 실시간 게임은 게임플레이 품질이 저하(게임플레이 품질이 떨어지지만 기술적으로 플레이는 가능한 상태)되거나 플레이 불가능(플레이어가 연결을 유지할 수 없거나 게임 로직이 올바르게 작동하지 않는 상태)한 것으로 간주하는 지연 시간 및 패킷 손실 임곗값이 정해져 있습니다. 매치메이킹에 QoS 결과를 사용하면 플레이어가 QoS 품질이 좋지 않은 지역에서 플레이하는 것을 방지할 수 있습니다.
이러한 제한을 설정할 때는 연결 상태가 좋지 않은 플레이어의 경험, 그리고 해당 플레이어와 함께 게임을 플레이하는 다른 플레이어의 경험을 모두 고려해야 합니다. 예를 들어 게임 엔진에 따라 지연 시간이 길거나 패킷 손실이 많은 플레이어의 경험이 크게 저해되지 않지만, 다른 플레이어는 해당 플레이어가 순간 이동하는 것처럼 보여 함께 게임을 플레이하는 것이 불가능한 경우도 있습니다. 그렇기 때문에 클라이언트가 수집한 지역별 QoS 결과를 처리하여 플레이 참여가 허용되지 않거나 불가능한 지역을 필터링해야 합니다.
- 플레이어가 얻을 수 있는 최상의 QoS 결과가 게임이 허용하는 지연 시간 또는 패킷 손실 범위를 벗어나지만 여전히 기술적으로 가능하다면, 플레이어의 최상의 결과를 제외한 나머지 모든 결과를 필터링하는 것을 고려할 수 있습니다. 이렇게 하면 연결 품질이 좋지 않더라도 플레이어가 매치를 찾을 수는 있습니다. 이때는 플레이어에게 연결 품질 경고를 표시해 게임플레이에 문제가 발생할 수 있다고 알리는 것이 좋습니다.
- 플레이어가 얻을 수 있는 최상의 QoS 결과가 플레이 불가능 임곗값을 초과하는 경우, 적절한 오류 메시지를 표시하고 해당 플레이어가 플레이에 참여할 수 없도록 설정하는 것이 좋습니다.
QoS 베스트 프랙티스
Multiplay Hosting QoS 프로토콜을 사용할 때 다음 성공 사례를 살펴보십시오.
- 티켓에 포함되는 지역별 지연 시간 및 패킷 손실 값은 일반적으로 해당 지역에 연결된 각 QoS 서버의 모든 응답에 대한 평균 또는 평면화 값이어야 합니다. 결과에 가중 평균을 적용하여 최신 결과에 더 많은 가중치를 부여하면 현재 네트워크 품질을 더 정확하게 반영할 수 있습니다.
- 패킷 손실 대비 지연 시간 비율을 확인하십시오. 예를 들어, 일반적으로는 정상적인 게임 세션이 이뤄질 만큼 지연 시간이 매우 낮은 연결이라도 실시간 게임에서는 패킷 손실이 조금만 발생해도 영향을 받을 수 있습니다.