룸 유지 가이드
이 가이드에서는 어떻게 Photon이 웹서버에 룸 데이터를 유지하는지 설명합니다.
개념
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 >= PlayerTTL PlayerTTL >= 0
|
룸 상태는 절대 전송되지 않습니다. |
true | valid path | valid path |
PlayerTTL > EmptyRoomTTL EmptyRoomTTL >= 0
|
저장 후 PlayerTTL - EmptyRoomTTL ms 이내에서만 룸이 로드 됩니다.
|
false | * | * | * | 룸 상태는 절대 전송되지 않습니다. |
* | 비어 있거나 유효한 패스가 아님 | * | * | 룸 상태는 절대 로드되지 않습니다. |
* | * | 비어 있거나 유효한 패스가 아님 | * | 룸 상태는 절대 전송되지 않습니다. |