의도
멀티플레이어 세션의 상태 — 누가 참여했는지, 어떤 역할인지, 어떤 모드인지, 어떤 맵인지 — 는 세션 라이프사이클 전반에 걸쳐 정확하게 유지되어야 합니다. 상태가 동기화 손실되거나 손상되면, 참여하는 플레이어는 잘못된 정보를 보게 되며 기존 플레이어는 잘못된 컨텍스트에 놓입니다. XR-067은 타이틀이 모든 합리적인 변동 상황에서 세션 상태를 유지할 것을 요구합니다.적용 대상
멀티플레이어 세션 상태(MPSD 또는 최신 동등물)를 가진 모든 타이틀.요구 사항
타이틀은 반드시 다음을 수행해야 합니다.- 모든 상태 전환(멤버 참여, 멤버 이탈, 역할 변경, 모드 변경, 호스트 마이그레이션) 시 MPSD 세션 상태를 런타임 세션과 동기화된 상태로 유지합니다.
- 호스트가 연결 해제될 때 호스트 마이그레이션을 올바르게 처리합니다 — 새 호스트를 선출하고, 권위 있는 상태를 전달하며, 남은 멤버에게 알립니다.
- 멤버 연결 해제를 처리합니다 — 세션 상태에서 이탈한 멤버를 제거하고, 남은 멤버에게 알리고, 세션이 더 이상 가득 차 있지 않다면 참여 가능성을 조정합니다.
- 네트워크 오류를 처리합니다 — 호스트의 일시적 네트워크 손실이 빠르게 복구되는 경우 세션이 해체되어서는 안 됩니다.
- 플랫폼 이벤트를 처리합니다 — 로그아웃, Quick Resume, 컨트롤러 변경 — 다른 멤버를 위한 세션이 손상되지 않도록 합니다.
- 존재 기반 참여(join-from-presence)가 여전히 마이그레이션된 세션을 찾을 수 있도록 호스트 마이그레이션 전반에 걸쳐 세션 아이덴티티를 올바르게 유지합니다.
- 세션이 자연스럽게 종료될 때(모든 멤버가 이탈, 게임 완료) 세션을 정리하여 MPSD에서 유령 세션이 남지 않도록 합니다.
- 멤버 간에 세션 상태를 일관되지 않게 표시합니다.
- 런타임 세션이 종료된 후에도 오래된 MPSD 세션이 유지되도록 허용합니다.
- 호스트가 연결 해제될 때 남은 모든 멤버를 제외합니다.
- 실제로 연결되지 않은 멤버를 세션 상태에 조작해 포함시킵니다.
테스트된 시나리오
- 4인 세션을 호스팅합니다. 호스트가 연결 해제되도록 합니다(네트워크 분리). 호스트 마이그레이션을 확인하고, 남은 3명의 멤버가 계속 플레이할 수 있는지 확인합니다.
- 호스트가 아닌 멤버가 연결 해제되도록 합니다. 상태에서 정상적으로 제거되는지 확인합니다.
- 세션에 빠르게 참여/이탈합니다. 세션 상태가 일관되게 유지되는지 확인합니다.
- 로비 도중에 게임 모드를 변경합니다. 상태가 모든 멤버에게 전파되는지 확인합니다.
- 세션 도중 로그아웃합니다. 남은 멤버에 대해 세션 상태가 업데이트되는지 확인합니다.
모범 사례
- 권위 있는 호스트 또는 중재 세션을 설계하여 세션 상태에 대한 단일 진실 공급원이 있도록 합니다.
- MPSD 쓰기를 신중하게 사용합니다 — XR-132에 따른 스로틀링을 피하기 위해 속도를 제한합니다.
- 네트워크 오류 후 조정합니다 — 재연결 시 MPSD 상태를 다시 읽고 런타임과 차이를 비교합니다.
- 호스트 마이그레이션에 시간 제한을 둡니다 — 정해진 시간 내에 새 호스트가 선출되지 않으면 매달리지 않고 깔끔하게 해체합니다.
관련 XR
- XR-064 — 참여 가능한 세션.
- XR-070 — 친구 목록.
- XR-074 — 연결 손실.
- XR-115 — 게임플레이 중 사용자 추가/제거.
- XR-124 — 게임 초대.
- XR-132 — 서비스 액세스 제한.
