일반적인 오류 케이스 처리
PlayFab 매치 메이킹은 매치 메이킹에 들어오고 나가는 간단한 인터페이스를 제공합니다. 그럼에도 불구하고 계획에 따라 일어나지 않을 수 있는 여러 가지 요소가 여전히 있습니다. 가장 일반적인 오류 케이스 중 일부는 타이틀에서 처리해야 하는 오류 유형과 함께 아래에 나와 있습니다.
이 페이지에서는 PlayFab 매치 메이킹의 일반적인 흐름을 잘 알고 있다고 가정합니다. 매치 메이킹의 일반적인 사용에 대한 자세한 정보는 매치 메이킹 빠른 시작을 참조하십시오.
티켓 생성 시 오류
여러 가지 이유로 티켓이 생성되지 않을 수 있습니다. 이러한 경우 대부분 PlayFab 오류 코드는 제출 요청에 대해 무언가 잘못된 것을 식별합니다. 이를 수정하면 성공적으로 제출할 수 있습니다.
참고 항목
오류 MatchmakingAttributeInvalid
및 MatchmakingPlayerAttributesInvalid
는 특성 형식화 문제를 나타냅니다. 티켓의 특성을 전달하는 방법은 티켓 특성 지정 섹션을 참조하십시오.
다른 오류 코드는 요청이 유효하지만, 요청 외부의 상황에서는 티켓이 허용되지 않음을 나타냅니다. 특히 다음과 같습니다.
-
MatchmakingRateLimitExceeded
- 사용자가 티켓을 너무 자주 제출했음을 나타냅니다. 자세한 내용은 아래 섹션을 참조하세요. -
MatchmakingTicketMembershipLimitExceeded
- 사용자가 이미 다른 활성 티켓에 있음을 나타냅니다. 한 번에 두 개의 게임을 즐길 수 없기 때문에 사용자는 한 번에 대기 목록에 둘 이상의 티켓을 갖는 것이 제한됩니다. 이 상황을 해결하는 방법에 대한 자세한 내용은 아래 섹션을 참조하십시오.
503의 HTTP 오류 코드가 수신되는 경우 잠시 후 다시 요청하십시오.
호출이 MatchmakingRateLimitExceeded 반환
다른 PlayFab 기능과 마찬가지로 PlayFab 매치 메이킹은 게임 관리자 내부에서 구성된 제한에 따라 호출 수를 제한합니다.
MatchmakingRateLimitExceeded
오류를 수신하면 타이틀이 이 호출 유형의 한도를 초과했음을 나타냅니다.
매치 메이킹에서는 티켓이 일치하는지 확인하기 위해 GetMatchmakingTicket을 폴링할 때 가장 자주 발생합니다.
이 오류가 발생하지 않도록 하려면 제한을 늘리거나 호출 빈도를 줄이십시오.
참고 항목
응답의 HTTP 상태 코드는 429이지만 요청 자체는 유효하며 다시 시도할 수 있습니다.
티켓을 생성하거나 가입하면 MatchmakingTicketMembershipLimitExceeded 반환
PlayFab 매치 메이킹에서는 사용자가 두 매치를 입력하는 경우를 피하기 위해 대기 목록 당 한 번에 하나의 티켓만 사용할 수 있으며 어떤 티켓을 사용할 지 결정해야 합니다. 어느 것이든 매치가 되지 않는다면, 플레이어가 모자를 것이고, 플레이어가 매치 메이킹에 다시 참가해야 할 것입니다. 사용자가 취소되거나 일치하지 않지만 다른 티켓을 생성하거나 참가하려고 하는 티켓에 이미 있는 경우 오류 MatchmakingTicketMembershipLimitExceeded
이(가) 반환됩니다.
그러나 때로는 타이틀이나 서버가 충돌, 재시작 또는 예기치 못한 다른 오류로 인해 티켓을 손실할 수도 있습니다. 이런 일이 발생하는 경우 사용자 또는 타이틀이 알려지지 않은 활성 티켓이 남게 됩니다.
이 손실된 티켓은 이후의 모든 티켓이 만료될 때까지 이 사용자에게 제출되지 않도록 합니다. 이 경우 문제를 해결하는 데 사용할 수 있는 두 가지 옵션이 있습니다.
옵션 1: 매치 메이킹에서 티켓 지우기
사용자의 기존 티켓을 모두 취소합니다. CancelAllMatchmakingTicketsForPlayer를 호출하면 이 작업을 수행합니다. 이후 매치 메이킹에는 진행 중인 티켓이 없으며 새로운 티켓을 생성할 준비가 됩니다.
옵션 2: 손실된 티켓 찾기
사용자의 기존 티켓을 찾아서 계속 사용하십시오. ListMatchmakingTicketsForPlayer를 호출하면 사용자가 멤버로 있는 모든 매치 메이킹 티켓 ID를 반환합니다. 제공된 각 ticketId에서 GetMatchmakingTicket을 호출하면 해당 상태로 검색하고 일치하는 항목을 찾을 때까지 계속 모니터링할 수 있습니다.
멀티 사용자 티켓에 모든 플레이어가 참여하는 것은 아님
멀티 사용자 티켓을 생성하면 초대된 플레이어 중 한 명이 실패하거나 참가를 거부할 수 있습니다. 이와 같은 경우 생성된 티켓은 만료될 때까지 WaitingForPlayers 상태로 유지됩니다. 타이틀은 이러한 상황이 수시로 발생할 것으로 예상하고 UI 내에서 매우 짧은 시간 제한을 설정합니다.
이 제한 시간이 끝나면 타이틀은 티켓을 취소하고 모든 플레이어가 게임을 함께 하기로 동의했는지 확인해야 합니다.
GetMatch 반환을 찾을 수 없음
매치가 만들어지면 일정 기간 동안 매치가 라이브 상태가 되며 최종적으로는 만료됩니다. 매치가 시간 내에 검색되지 않으면 해당 사용자는 티켓을 다시 제출하여 다시 매치해야 합니다. 일치 항목이 적시(즉, 몇 분 이내에)에 검색되도록 하여 만료되는 것을 방지할 수 있습니다.
여기에 설명된 대로 매치 메이킹과 로비를 함께 사용하는 경우, 여기서 경기가 시간 초과된 후 lobbyArrangementString이 일정 기간 동안 유효할 수 있습니다. GetMatch가 만료되기 전에 GetMatch의 정보를 검색하고 사용해야 합니다.
티켓이 취소됨
티켓은 여러 이유로 취소될 수 있습니다. 가장 일반적인 케이스는 사용자 취소 및 티켓 만료이지만 티켓은 서버에 의해 취소될 수도 있습니다.
GetMatchmakingTicket
을(를) 호출하여 티켓이 취소된 것을 발견하는 경우 그 이유가 CancellationReason
필드에 나열됩니다. 가능한 CancellationReason
개 응답과 잠재적 해결 방법이 아래에 나열되어 있습니다.
CancellationReason | 설명 | 해상도 |
---|---|---|
사용자 | 사용자가 매치 메이킹 티켓을 취소함 | 의도적인. 원하는 경우 새 티켓을 만듭니다. |
Server | 서버 API를 통해 서비스가 매치 메이킹 티켓을 취소했습니다. | 의도적인. 원하는 경우 새 티켓을 만듭니다. |
시간 제한 | GiveUpAfterSeconds에 도달하여 티켓이 만료됨 | 새 티켓으로 다시 시도하고 필요한 경우 티켓 특성을 조정합니다. |
ServerAllocationFailed | 큐가 서버를 할당하지만 할당 요청이 실패했습니다. | 지역에서 사용할 수 있는 대기 서버를 확인하고 새 티켓으로 다시 시도하세요. |
TicketUnmatchable | 티켓 매개 변수와 큐의 규칙을 조합하면 이 티켓을 매치할 수 없음 | 티켓 속성이나 큐 구성이 호환되도록 조정합니다. |
RetryRequired | 내부 일시적인 매치 메이킹 오류 | 다음 요청 시 해결될 타이밍 문제로 인해 새 티켓으로 다시 시도하세요. |
내부 | 내부 매치 메이킹 서비스 오류 | 새 티켓으로 다시 시도하세요. |
티켓을 취소하면 오류를 반환
티켓을 취소한다고 해서 반드시 성공하는 것은 아닙니다. 대부분의 오류는 그 자체로 명확 MatchmakingTicketAlreadyCompleted
오류는 두 가지 가능성 중 하나를 나타냅니다.
- 티켓이 이미 취소되었습니다.
- 티켓이 이미 일치되었습니다.
이 오류가 발생하면 타이틀은 GetMatchmakingTicket을 호출하여 이 두 케이스를 구분해야 합니다. 첫 번째 케이스에서는 티켓이 이미 원하는 상태가 되어 더 이상 조치를 취할 필요가 없습니다. 두 번째 케이스는 사용자의 취소가 너무 늦었고 이미 일치했음을 나타냅니다. 사용자의 취소와 발견된 매치 간의 이 경합 조건은 피할 수 없으며 타이틀로 처리해야 합니다.
타이틀에는 이 문제를 해결할 두 가지 옵션이 있습니다. 어쨌든 매치에 참가하거나, 사용자의 취소 요청을 무시하거나, 매치에서 플레이어가 참가하지 않을 것임을 알기 시작합니다. 어느 옵션도 완벽하지는 않지만 이 상황이 발생할 것을 예상하고 의식적으로 타이틀 흐름을 생성하는 것이 중요합니다. 플레이어가 여러 가지 이유로 매치에 참가할 수 없다는 점에 유의할 가치가 있으므로 여기 언급된 경합 조건에 관계없이 타이틀이 이 케이스를 처리해야 합니다.