- 修訂摘要
- 簡介
- 本文件中使用的術語
- 多人遊戲工作階段目錄
- MPSD 工作階段
- 工作階段範本屬性
- 合約結構描述更新
- 工作階段文件中的成員初始化
- 對戰票證工作階段
- 服務品質 (QoS) 範本
- QoS 階段與工作階段初始化詳細資料
- XBOX Cloud Compute 工作階段
- 原始工作階段與自訂遊戲屬性
- 作用中成員衰減
- 常見問題集與疑難排解
修訂摘要
用戶端的 XBOX Services API (XSAPI) 程式庫目前在與 MPSD 服務通訊時使用合約版本 104。 此版本的文件將工作階段範本結構描述更新為合約版本 107,這是 MPSD 服務所支援的最新合約版本。 版本 104 與 107 之間的變更摘要於下方的合約結構描述更新一節中。 請注意,針對合約版本 104 撰寫的範本,如果要以 107 重新發佈,就需要更新。 不過,服務具有回溯相容性,因此您可以繼續使用目前的程式庫,這些程式庫將在未來的版本中更新。 本文件的上一個修訂版本更新了有關伺服器工作階段的資訊,並新增了有關 XSAPI 與 RESTful 服務呼叫的新章節。 此外,也更新了「查詢工作階段狀態資訊」一節中的表格,並修訂了「服務品質 (QoS) 範本」一節。簡介
多人遊戲工作階段是一份位於雲端多人遊戲工作階段目錄 (MPSD) 上的安全文件,此文件代表一群正在玩遊戲的人。 具體而言,多人遊戲工作階段具有下列特性:- 每個工作階段都有唯一的 URI。
- 工作階段文件包含目前的成員、遊戲設定、啟動程序資料以及遊戲伺服器資訊。
- 遊戲會建立並管理自己的工作階段。
- 工作階段可讓其成員之間建立連線。
本文件中使用的術語
多人遊戲工作階段目錄
MPSD 可促進並協助遊戲在線上玩家之間協調工作階段資訊。 可以建立不同類型的工作階段,以完成多人遊戲的不同工作。 下表列出在 XBOX 360 上與在 XBOX One 或更新版本 (包括 PC) 上完成這類工作的方式差異。工作階段模式
-
遊戲工作階段
- 包含玩家的 XUID、安全裝置位址資料與屬性狀態的工作階段。這被視為實際的遊戲工作階段。
- 可以是點對點、對等對主機、對等對伺服器或混合式。
-
對戰票證工作階段
- 提交至配對以尋找其他玩家一起遊玩的工作階段。請注意,如果遊戲正在尋找更多玩家,遊戲工作階段也可以是票證工作階段。
-
伺服器工作階段
- 透過 XBOX Compute 處理建立與使用的遊戲工作階段。
MPSD 工作階段
工作階段會維護兩份相關實體的清單:- 已加入或受邀加入工作階段的成員 (使用者)。
- 已加入工作階段的伺服器 (雲端伺服器或專用伺服器)。
- 在建立時設定的常數值。
- 可變的屬性。
- 唯讀的中繼資料。
XSAPI 與 RESTful 服務呼叫
與 XBOX 服務工作階段和配對服務互動的方式有兩種。- 標準 HTTPS 呼叫
- XSAPI 包裝函式
使用標準 HTTPS 呼叫 RESTful 服務
對於 XBOX One 及更新版本,與 XBOX 服務工作階段和配對服務互動的第一種方式,是使用標準 HTTPS 呼叫 RESTful XBOX 服務 URI。 這讓遊戲能夠根據其伺服器與遊戲設定,彈性地呼叫這些服務並與其互動。 如需這些 URI 的清單,請參閱 XBOX 服務 RESTful 參考。使用 RESTful 服務的 XSAPI 包裝函式
與工作階段和配對服務互動的第二種方式,是使用作為 RESTful 服務 URI 包裝函式的 XSAPI。 這讓您能以較傳統的方式在程式碼中使用 API,而不必為每個呼叫處理 HTTPS 流量。 如需 XSAPI 的詳細資訊,請參閱 xbox-live-api GitHub 頁面。 該參考文件包括:- JSON 剖析 API 參考 - JSON 剖析 API 的參考資料。
- Windows.Web 命名空間 - Windows.Web 命名空間成員。
- XBOX Compute SDK 參考 - 為 XBOX Compute 建立遊戲伺服器執行個體的 API。
MPSD 工作階段與範本
MPSD 工作階段是使用透過 Partner Center 擷取的範本來建立的。 範本是 JSON 文件,用於定義要建立之工作階段的架構。 範本會為新的工作階段提供常數。 下列摘錄是範本設定範例。
檢查您的 SCID 設定了哪些範本
工作階段範本
可以從 MPSD 擷取 SCID 中存在的工作階段範本清單,以及特定工作階段範本的詳細資料:查詢工作階段狀態資訊
可以在服務設定與工作階段範本層級查詢工作階段:
結果是工作階段參考的 JSON 陣列。
部分工作階段資料會內嵌包含在其中。
注意 每個查詢都必須包含關鍵字篩選、XUID 篩選,或兩者兼具。
將 private (傳回私人工作階段) 或 reservations (傳回使用者尚未加入的工作階段) 設為 true 時,呼叫者必須具有工作階段的伺服器層級存取權,或者呼叫者的 XUID 宣告必須符合 URI 中的 XUID 篩選。
否則,將會傳回 403 Forbidden (無論是否真的存在任何這類工作階段)。
下列程式碼摘錄顯示查詢回應的範例。
工作階段範本屬性
合約結構描述更新
如本文件開頭所述,最新的工作階段範本合約版本為 107,與先前的版本 104 相比,它對結構描述做了一些變更。 針對合約版本 104 撰寫的範本,如果要以 107 重新發佈,就需要更新。 以下是變更摘要。-
/constants/system/managedInitialization 重新命名為 /constants/system/memberInitialization。
- autoEvaluate 欄位重新命名為 externalEvaluation,且其極性相反,但預設值仍為 false。
- membersNeededToStart 的預設值從 2 變更為 1。
- joinTimeout 的預設值從 5 秒變更為 10 秒。
- measurementTimeout 的預設值從 5 秒變更為 30 秒。
-
移除了 /constants/system/timeouts,並將逾時重新命名並移至 /constants/system 下。
- reserved 逾時變為 reservedRemovalTimeout。
- inactive 逾時變為 inactiveRemovalTimeout,其新的預設值為 0,而非 2 小時。
- ready 逾時變為 readyRemovalTimeout。
- sessionEmpty 逾時變為 sessionEmptyTimeout。
- 在代表實際遊戲 (相對於對戰與大廳工作階段等輔助工作階段) 的工作階段上,必須將 /constants/system/capabilities/gameplay 指定為 true,才能啟用最近一起玩的玩家與信譽回報。
系統物件
工作階段文件中的每個系統物件都有固定的結構描述,由 MPSD 強制執行並解譯。 在 PUT 要求的本文中,系統物件會像自訂物件一樣經過驗證與合併。 但與自訂物件不同的是,系統物件在合併後,會根據這些結構描述進一步驗證並據以執行動作。 /constants/system逾時
工作階段可以由計時器與其他外部事件變更。 MPSD 中的 Timeouts 物件提供管理工作階段存留期與成員的基本機制。 工作階段的 nextTimer 欄位會提供下一個計時器的時間。 用戶端可以使用此資訊為下一次輪詢挑選合適的間隔。 此值也會在 Expires HTTP 標頭中傳回。 逾時以毫秒為單位指定。 允許使用零,表示逾時應立即發生。 如果未指定某個逾時,則會被視為無限。 由於逾時有預設值,工作階段範本應該明確為無限逾時指定「null」。SessionEmptyTimeout
/constants/system/sessionEmptyTimeout 值會設定工作階段變成空的之後,經過多少毫秒會被刪除。 預設值為零,表示工作階段會立即被刪除。 如果未指定此值,空的工作階段將會無限期存在。成員逾時
/constants/system 內的其他三個逾時,控制成員可以維持在特定狀態的時間長度:-
reservedRemovalTimeout
- 逾時到期時會刪除保留。預設值為 30 秒。
-
inactiveRemovalTimeout
- 根據預設,非作用中成員會在兩小時後從工作階段中移除。
-
readyRemovalTimeout
- 根據預設,處於「ready」狀態的成員會在三分鐘後還原為非作用中狀態。
工作階段文件中的成員初始化
成員初始化
memberInitialization 物件會控制工作階段建立後和/或新成員加入工作階段時的初始化階段。 工作階段會自動追蹤逾時與初始化階段,如果設定了任何計量,也包括 QoS 測量。 對於設定了 initializationEpisode 屬性的成員,這些逾時會覆寫工作階段的保留與就緒逾時。 範例:
-
joiningTimeout
- 使用者加入工作階段的時間長度 (以毫秒為單位)。未能加入之成員的保留會被移除。
-
measuringTimeout
- 成員上傳其測量結果的時間長度。未能上傳測量結果的成員會被標記為 failureReason 為「timeout」。
-
evaluationTimeout
- 成員做出並上傳評估決策的時間長度。如果未收到任何決策,則視為失敗。
- MPSD 可以根據工作階段範本中提供的需求,自動進行 QoS 評估。當 externalEvaluation 設為 false 時,就會執行評估。設定 evaluationTimeout 時,externalEvaluation 必須為 true。如果有兩個點對點或對等對主機需求,您仍應將 externalEvaluation 設為 false,讓工作階段自動完成初始化。
- 這是自動評估成功所需、必須存在 “initialize”:“true” 並通過 QoS 的成員保留數目下限。
初始化回合
設定 memberInitialization 物件時,MPSD 會依回合推進初始化階段。 第一個回合會在建立工作階段時開始,並包含範本中定義的所有階段。 在回合執行期間受邀或加入的任何新成員,都會被標記為參與下一個回合。 一般而言,可以從工作階段的 initializing 物件擷取回合或 memberInitialization 的狀態。 注意 請注意,初始化完成後會移除此物件。 範例:對戰票證工作階段
當 MPSD 工作階段被用作對戰票證工作階段時,會使用一些特殊的工作階段屬性與常數。 /members//constants/system服務品質 (QoS) 範本
對於遊戲工作階段範本,可以新增一些值,告知 MPSD 與網路層以及主機社交功能協調。 此協調的目的是在建立工作階段之前,以及在通知使用者遊戲已可加入之前,驗證連線狀態的品質。 下列程式碼摘錄是具有 QoS 的對等對主機遊戲工作階段範本範例:QoS 工作階段範本屬性
如果設定了 memberInitialization 物件,工作階段會預期用戶端系統或遊戲在工作階段建立後和/或新成員加入工作階段時執行初始化。 工作階段會自動追蹤逾時與初始化階段,如果設定了任何計量,也包括 QoS 測量。 對於設定了 initializationEpisode 屬性的成員,這些逾時會覆寫工作階段的保留與就緒逾時。QoS 階段與工作階段初始化詳細資料
範本完成成員初始化後,MPSD 會追蹤並回報遊戲建立的 QoS 結果。 此作業的進度會以工作階段文件中的 initializing 物件表示,如上方的成員初始化一節所述。 initializing 物件具有 stage 屬性,代表目前的初始化階段。 階段會從 joining 進入 measuring,再進入 evaluating。- 如果初始化回合 #1 失敗,stage 會被設為 failed,且工作階段無法初始化。否則,當初始化回合完成時,就會移除「initializing」物件。如果 externalEvaluation 設為 false,就會略過 evaluating 階段。如果 metrics 與 measurementServerAddresses 都未設定,就會略過 measuring 階段。
- 主機候選項目是依偏好順序列出的裝置權杖。如果設定了 peerToHostRequirements 且未設定 /properties/system/host,則會在初始化回合 #1 的 measuring 階段之後設定這些項目。設定 /properties/system/host 物件後,就會清除這些項目。
- 只有在成員已接受,且找到該成員的玩家代號宣告時,才會設定 gamertag 屬性。
- deviceToken 屬性會在成員上傳安全裝置位址時設定。它是不區分大小寫的字串,可用於相等比較。
- 使用者對工作階段文件執行第一個 PUT 要求後,就會移除 reserved 值。玩家處於保留狀態,表示他們已受邀加入遊戲工作階段,但既未接受,其連線也尚未經過評估。
- 如果成員處於作用中狀態,activeTitleId 就是成員作用中之遊戲的十進位識別碼。
- 此屬性是指使用者加入工作階段的時間。如果 reserved 為 true,則 joinTime 會是建立保留的時間。
- 如果此成員在 properties/system/turn 陣列中,就會存在此屬性,否則不會存在。
- 如果成員未成功通過 joining 或 measuring 階段,則會在離開該階段時於成員物件上設定 initializationFailure 屬性。依優先順序,它可以設為 timeout、latency、bandwidthdown、bandwidthup、network、group 或 episode。 network 值表示網路設定和/或狀況 (例如衝突的網路位址轉譯 [NAT]) 導致無法測量 QoS 計量。joining 結束時唯一可能的值是 group。(joining 逾時時,會移除保留。) 在「evaluation」階段失敗後,會對初始化回合中所有未在 joining 或 measuring 期間失敗的成員設定 episode 值。
- 如果設定了 memberInitialization,且成員是以 “initialize”: true 新增的,此值會設為該成員將參與的初始化回合。建立新工作階段時新增的成員會使用值 1。初始化回合結束時會移除此值。
- next 屬性代表工作階段中下一個成員的索引值。如果沒有更多成員要新增,其值會與下方 membersInfo 物件中的 next 屬性相同。
XBOX Cloud Compute 工作階段 (已淘汰)
XBOX Cloud Compute 工作階段包含不區分大小寫之連接字串的排序清單,工作階段可以使用這些字串連線至遊戲伺服器。 一般而言,遊戲應該使用清單上的第一個字串,但較複雜的遊戲可以使用自訂機制來選擇其他字串之一 (例如根據負載)。原始工作階段與自訂遊戲屬性
工作階段可用來儲存與多人遊戲相關的自訂管理資訊 (中繼資料)。 遊戲資料或儲存的資訊應該儲存在 TMS++ 中。屬性包
上述標示為屬性包的每個物件,都由兩個選擇性的內部物件 system 與 custom 組成。 custom 物件可以包含任何 JSON。作用中成員衰減
當 MPSD 偵測到使用者不再參與遊戲時,作用中成員會自動被標記為非作用中。 例如,如果目前狀態服務讓使用者記錄逾時,就可能發生這種情況。 此機制只是最後一道防線;也就是說,當成員離開或切換離開遊戲、登出或以其他方式不再參與時,遊戲仍必須主動將成員標記為非作用中 (或將其從工作階段中移除)。常見問題集與疑難排解
如何呼叫 MPSD?
使用憑證驗證:client-sessiondirectory.xboxlive.com 範例:如何找出要使用的 SCID、工作階段範本與沙箱?
您可以在 Partner Center 中您遊戲的頁面找到此資訊。 如果您尚未取得 Partner Center 的存取權,請聯絡您的開發人員客戶經理,他們可以協助您取得此資訊。是否有可供我比較的要求本文範例?
呼叫 MPSD 時收到 404 錯誤。
收集 Fiddler 追蹤以協助取得更多資訊,然後執行下列步驟:-
檢查作為 HttpResponse 本文一部分傳回的訊息中是否有常見的 404 訊息:
- The requested service config is either invalid or not configured for sessions。請確認使用的 SCID 正確無誤。
- The requested session wasn’t found。擷取工作階段之前,請確認已建立工作階段,且工作階段範本正確無誤。您可以使用 PUT 呼叫建立工作階段。
- 檢查您使用的 URI。
- 重新開機主機和/或使用新的使用者再試一次。
呼叫 MPSD 時收到 403 錯誤。
這通常是權限或範圍問題。 收集 Fiddler 追蹤以協助取得更多資訊,然後執行下列步驟:- 檢查作為 HttpResponse 本文一部分傳回的訊息中是否有常見的 403 訊息:
-
*The requested service config cannot be accessed. *
- 請確認您使用的帳戶具有該沙箱的存取權。
- 請確認您位於正確的沙箱中。
- 如果您使用憑證驗證並收到此錯誤,請聯絡您的 DAM。
-
The requested session cannot be accessed. Private Sessions can only be read by members of the session.
- 您正嘗試存取可見度為「private」的工作階段。只有工作階段內的成員才能讀取工作階段文件。
-
The request body can’t contain existing member references unless the authentication principal includes a server.
- 您無法代表使用者將其他使用者加入工作階段,只能邀請。請將索引設為 “reserve_
<number>” 以邀請玩家。
- 您無法代表使用者將其他使用者加入工作階段,只能邀請。請將索引設為 “reserve_
