This document is about: SERVER 4
SWITCH TO

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.
Back to top