룸 유지 가이드

이 가이드에서는 어떻게 Photon이 웹서버에 룸 데이터를 유지하는지 설명합니다.

현재 PUN은 룸에 재참여하는 것을 완전하게 지원하고 있지 않습니다. 따라서 이 가이드는 PUN 을 포함하고 있지 않습니다.

개념

Photon 어플리케이션은 동기적으로 설정되어 있지만 비동기 방식으로 확장 될 수 있습니다. Photon webhooks를 사용할 수 있게 할 수 있으며 플레이어들이 게임 데이터의 누락없이 방에 재참여 할 수 있도록 설정 할 수 있습니다. 또한 친구 초대를 받아서 비동기적으로 룸에 참여 할 수 도 있습니다.

Photon 에서 게임 데이터는 룸 상태로 언급 됩니다. 룸 상태는 다음으로 구성 됩니다:

  • 룸 옵션
  • 룸 프로퍼티
  • 액터 목록
  • 이벤트 캐시

떠났던 게임을 다시 시작하기 위해서는 룸 상태가 다시 만들어 져야 합니다. 따라서 Photon이 데이터의 저장과 로딩을 가장 기초적 이면서도 간단한 방법으로 룸 상태를 현재로 저장하는 이유입니다.

룸 상태 저장

룸 상태를 저장하려면 다음의 webhooks 설정이 필요 합니다:

  • BaseUrl 는 유효한 URL 이어야 합니다.
  • IsPersistent = true.
  • PathClose 는 유효한 작업 패스 이어야 합니다.

룸을 생성 할 때 이러한 조건이 맞아야 합니다:

  • PlayerTTL == -1 또는 PlayerTTL > EmptyRoomTTL.
  • CheckUserOnJoin = true.

플레이어가 룸을 포기하지 않고 떠나게 되는 경우에는 OpLeave(true) 를 호출 해야 합니다.

룸 상태는 GameClose webhook 내로 전송 되며 룸 상태를 웹 서버에 저장 해야 합니다.

룸 상태 로딩

룸 상태를 로드 하기 위해서는 아래 처럼 webhooks를 설정 해야 합니다:

  • BaseUrl 유요한 URL 이어야 합니다.
  • IsPersistent = true.
  • PathCreate 유효한 작업 경로 이어야 합니다.

룸에 재참여 하기 위해서는 다음의 메소드를 호출 해야 합니다:

lbClient.OpJoin(-1, roomName);

만약 게임안에 도전과 초대 기능이 있다면 AsyncJoin 을 true 로 설정하여 사용할 수 있도록 해야 하고 일반적으로 이름을 통하여 룸에 참여 합니다:

lbClient.OpJoin(0, roomName);

웹 서버로 부터 이전에 저장되었던 룸 상태를 webhook 응답으로 받을 필요가 있습니다.

CheatSheet

IsPersistent PathCreate PathClose RoomOptions 설명
true valid path valid path PlayerTTL == -1 && 0 <= EmptyRoomTTL 비활성 플레이어들은 타임아웃이 절대 걸리지 않습니다.
룸 상태는 다음을 제외하고 항상 전송 됩니다.:
  • 모든 액터들이 영원히 명시적으로 나간 경우.
  • 룸이 비어있는 상태로 EmptyRoomTTL ms 동안 유지 될 경우.
* * * EmptyRoomTTL >= PlayerTTL >= 0 룸 상태는 절대 전송되지 않습니다.
true valid path valid path PlayerTTL > EmptyRoomTTL >= 0 저장 후 PlayerTTL - EmptyRoomTTL ms 이내에서만 룸이 로드 됩니다.
false * * * 룸 상태는 절대 전송되지 않습니다.
* 비어 있거나 유효한 패스가 아님 * * 룸 상태는 절대 로드되지 않습니다.
* * 비어 있거나 유효한 패스가 아님 * 룸 상태는 절대 전송되지 않습니다.

 기술문서 TOP으로 돌아가기