디자인 고려 사항
매치 메이커를 구현하려면 매치 메이킹 세션을 찾고 있는 플레이어의 데이터를 저장하는 데이터베이스가 필요하며, 서버에서 실행되는 프로세스 또는 논리를 처리하는 서버리스 Azure Functions 집합이 필요합니다.
- 큐에 플레이어 추가 - 플레이어가 멀티 플레이어 세션을 검색하기 시작하면 호출됩니다.
- 큐에서 플레이어 삭제 - 플레이어가 멀티 플레이어 세션 검색을 중단하면(매치 메이킹 취소) 호출됩니다.
- 플레이어 매칭 폴링 메커니즘을 통해 호출되며 게임 세션 서버 연결 세부 정보 또는 시간 제한 이벤트를 반환합니다.
- 서버 추가 - 새 서버를 만들 때 데이터베이스에 추가되는 관련 연결 정보(IP:포트)를 전달합니다.
- 상위 수준 관리자 - 시작할 수 있는 게임 세션을 찾고 각 세션을 위한 서버를 검색합니다.
선택적으로 서버가 충분하지 않은 것을 감지하면 다른 프로세스 또는 Azure 함수를 통해 확장을 요청할 수 있습니다. 다른 방법은 게임 호스팅 오케스트레이터를 사용하는 경우 이를 오케스트레이터에 위임하는 것입니다.
매치 메이킹 논리를 빌드할 때 세 가지 주요 변수를 고려해야 합니다. 적어도 2/3의 성공 확률을 목표로 합니다.
- 최적 기량 매치 - 게임 세션에 고려된 모든 플레이어에서 각 플레이어가 게임 전문 지식 측면에서 얼마나 근사한가요?
- 최적 대기 시간 - 각 플레이어가 대기 시간 측면에서 얼마나 근사한가요?
- 최적 큐 시간 - 플레이어가 참가할 게임 세션을 찾는 데 얼마나 오래 걸립니까?
또한 고려해야 할 관련 개념이 몇 가지 있습니다.
- 허용 목록 작성/차단 목록 작성 - 플레이어 또는 게임 작성자가 특정 플레이어를 차단하거나 특정 플레이어를 게임 세션에 참가하도록 허용할 수 있습니까?
- 진행 중 참가 - 플레이어가 게임 세션이 시작된 후에도 참가할 수 있나요?
- 자동 취소 - 특정 게임 세션이 일정 시간 후 시작되지 않는 경우 자동으로 취소할 수 있는 제한을 설정합니까?
요약하면, 랜덤 매치 메이킹 시간을 줄이는 좋은 방법은 게임에서 지원하는 각 유형에 대한 큐를 사용하고 요청과 일치하는 모든 큐에서 각 플레이어의 매치 메이킹을 시도하는 것입니다. 그런 다음 큐가 꽉 차면 특정 게임 세션을 시작하고 모든 큐에서 관련 플레이어를 제거하면 됩니다.
팁
즉시 사용할 수 있는 매치 메이킹 솔루션을 찾고 있는 경우 PlayFab은 매치 메이킹 지원이 포함된 클라우드 연결 게임을 빌드, 출시 및 확대하기 위한 완전한 백엔드 플랫폼입니다.
참조 구현 세부 정보
다음은 동일한 사용 사례를 활용하여 바로 시작할 수 있는 다양한 구현입니다.
- 서버리스 - Azure Functions 및 Azure Cache for Redis를 사용