Room Persistence Guide
本指南解釋了如何在網絡伺服器上持久保存Photon房間的數據。
概念
雖然Photon應用程序本質上是同步的,但也可以擴展到支持異步行為。
Photon webhooks可以被啟用和配置,它可以讓玩家在不丟失遊戲數據的情況下無縫離開和重新加入房間。
也可以通過朋友的邀請異步加入房間。
在Photon中,遊戲數據被稱為房間狀態。房間狀態由以下部分組成:
- 房間選項
- 房間屬性
- Actor列表
- 事件緩存
- 興趣小組
為了恢復已經離開的遊戲,房間狀態應該被重構。
這就是為什麼,在Photon中持久化數據的最簡單方法是原封不動地保存房間狀態。
保存房間狀態
要保存房間狀態,需要以下webhooks設置。
BaseUrl
應該是一個可用的URL。IsPersistent = true
。PathClose
應該是一個有效的工作路徑。
當您創建房間時,需要滿足這些條件。
RoomOptions.PlayerTTL == -1
或者RoomOptions.PlayerTTL > RoomOptions.EmptyRoomTTL
。RoomOptions.CheckUserOnJoin = true
。
當玩家想離開一個房間而不放棄時,您應該調用Disconnect()
或OpLeave(true)
。
房間狀態將在PathClose webhook中發送,您將需要從您的網絡伺服器上保存它。
加載房間狀態
要加載一個房間狀態,需要以下webhooks設置。
BaseUrl
應該是一個可用的URL。IsPersistent = true
。PathCreate
應該是一個有效的工作路徑。
要重新加入一個房間,您應該調用:
C#
loadBalancingClient.OpReJoinRoom(savedRoomName);
如果您的遊戲包括挑戰和邀請,您應該保持AsyncJoin
的啟用(默認)。
這樣您就可以通過名稱正常加入房間:
C#
loadBalancingClient.OpJoinRoom(roomName);
從Web伺服器上,您需要在webhook回應中返回之前保存的房間狀態。
CheatSheet
IsPersistent | PathCreate | PathClose | RoomOptions | Comment |
---|---|---|---|---|
true | valid path | valid path |
PlayerTTL == -1 0 <= EmptyRoomTTL
|
Inactive players can never timeout. Room state will always be sent unless all actors explicitly leave for good and the room stays empty for EmptyRoomTTL ms.
|
* | * | * |
EmptyRoomTTL >= PlayerTTL PlayerTTL >= 0
|
Room state will never be sent in PathClose webhook. |
true | valid path | valid path |
PlayerTTL > EmptyRoomTTL EmptyRoomTTL >= 0
|
The room can only be loaded within PlayerTTL - EmptyRoomTTL ms after saving it.
|
false | * | * | * | Persistence disabled. Room state will never be sent in PathClose webhook. |
* | empty or invalid path | * | * | Persistence disabled. Room state cannot be loaded using PathCreate webhook. |
* | * | empty or invalid path | * | Persistence disabled. Room state cannot be sent in PathClose webhook. |