跳轉到主要內容
本主題說明多人遊戲工作階段目錄 (MPSD) 服務如何讓遊戲分享連接一群使用者所需的基本資訊。 在傳送與接受邀請,以及使用者透過玩家卡被加入時,MPSD 會與殼層和主機作業系統協調。 MPSD 會跨多個用戶端集中管理遊戲的多人遊戲系統中繼資料。 MPSD 可確保工作階段功能同步且一致。 MPSD 是在 XBOX 服務雲端中運作的服務。 它由 XblMultiplayer 函式包裝。 本主題涵蓋下列內容:

MPSD 工作階段

MPSD 工作階段由其 XblMultiplayerSessionHandle 識別,代表一或多位使用者玩遊戲的情境。 MPSD 會將工作階段以安全 JSON 文件的形式儲存在 XBOX 服務雲端中。 具體而言,MPSD 工作階段具有下列特性。
  • 由遊戲建立與管理。
  • 具有唯一的 URI。如需詳細資訊,請參閱 Session Directory URI。
  • 可讓使用者 (稱為工作階段成員) 之間建立連線。
  • 儲存支援遊戲進行的資料,例如每個成員的屬性、遊戲設定、啟動程序資訊以及遊戲伺服器資訊。
每個工作階段都包含玩家的 XBOX 使用者識別碼 (XUID) 以及安全裝置關聯位址資料。 MPSD 支援數種工作階段,用於設定各種多人遊戲,包括下列變化。 返回本主題頂端。

MPSD 變更通知處理與中斷連線偵測

用戶端會使用即時活動 (RTA) 服務 WebSocket 連線至 MPSD。 此連線用於執行下列動作:
  • 根據遊戲起始的事件訂閱,在工作階段發生變更時傳送簡短通知 (肩拍通知)。
  • 偵測使用者中斷連線。
  • 根據中斷連線偵測,將使用者設為非作用中,然後將其從工作階段中移除。

建立使用者連線

XBOX Services API (XSAPI) 程式庫會管理用戶端與 MPSD 之間的連線。
  1. 遊戲呼叫 XblMultiplayerSetSubscriptionsEnabled。此方法會告知 XSAPI 用戶端打算將 RTA 連線用於多人遊戲用途。
  2. 當遊戲在目前使用者設為作用中狀態的情況下,第一次呼叫 XblMultiplayerWriteSessionAsync 或 XblMultiplayerWriteSessionByHandleAsync 時,就會建立連線並連接至 MPSD。
若要啟用工作階段通知並偵測中斷連線,工作階段範本必須將 connectionRequiredForActiveMembers 設為 true。

訂閱工作階段變更

MPSD 使用肩拍通知作為輕量通知,告知有值得關注的項目已變更。 啟用訂閱時,遊戲可以呼叫 XblMultiplayerSessionSetSessionChangeSubscription,訂閱工作階段變更的肩拍通知。 如需詳細資訊,請參閱「多人遊戲工作」主題中的訂閱 MPSD 工作階段變更通知一節。

處理肩拍通知

當工作階段的變更符合遊戲對該工作階段的訂閱時,MPSD 會使用 XblMultiplayerSessionChangedHandler 處理常式通知遊戲該變更。 遊戲接著應該擷取工作階段,將擷取的工作階段版本與先前快取的檢視進行比較,並採取適當的動作。

處理連線狀態變更通知

遊戲可以收到與 MPSD 之連線健康狀態變更的通知。 有兩個事件會發出這些變更的訊號。

中斷用戶端連線

當遊戲呼叫 XblMultiplayerSetSubscriptionsEnabled 停用通知時,您遊戲的用戶端就會中斷與 MPSD 的連線。 在此呼叫之後不久,XblMultiplayerSessionSubscriptionLostHandler 處理常式就會引發,表示用戶端已中斷與 MPSD 的連線。
在較早的多人遊戲版本中,遊戲會呼叫 XblRealTimeActivityDeactivate 來中斷與 RTA 服務的連線。 對於 2015 多人遊戲服務,此方法沒有作用。 在以 false 值呼叫 XblMultiplayerSetSubscriptionsEnabled 之後,如果 WebSocket 連線沒有其他使用者 (例如 RTA 服務對目前狀態服務的訂閱),就會自動中斷連線。

中斷連線偵測

MPSD 使用其中斷連線偵測功能,快速得知使用者何時非正常中斷連線。 非正常中斷連線的原因包括玩家的網路故障或遊戲當機。 MPSD 會將中斷連線之玩家的狀態從作用中變更為非作用中,並根據其他工作階段成員對工作階段的訂閱,視情況通知這些成員此變更。

處理 RTA 重新連線

XSAPI 會在中斷連線時嘗試重新連線至 RTA,並重新提交 RTA 訂閱。(如需詳細資訊,請參閱 RTA 服務的最佳做法。) 重新提交多人遊戲 RTA 訂閱會更新連線識別碼,此識別碼用於將 MPSD 工作階段中的使用者與用戶端 RTA 連線建立關聯。 XSAPI 會透過 XblMultiplayerAddConnectionIdChangedHandler 通知遊戲 MPSD 連線識別碼已變更。在回呼內,遊戲必須將新的連線識別碼寫入 MPSD 工作階段。可以呼叫 XblMultiplayerSessionCurrentUserSetStatus,然後呼叫 XblMultiplayerWriteSessionAsync 寫入工作階段,將新的連線識別碼寫入工作階段。
返回本主題頂端。

MPSD 工作階段控制代碼

MPSD 工作階段控制代碼是對工作階段的抽象且不可變的參考,也可以包含其他具型別的資料。 它類似於檔案控制代碼。 所有控制代碼都有控制代碼識別碼 (GUID),以及由服務設定識別碼 (SCID)、工作階段範本與工作階段名稱組成的完整工作階段參考。 控制代碼無法更新,但可以建立、讀取與刪除。
控制代碼可以指向不存在的工作階段。 使用不存在的工作階段名稱建立控制代碼,並不會導致建立新的工作階段。

控制代碼類型

2015 多人遊戲支援邀請控制代碼與活動控制代碼。

邀請控制代碼

邀請控制代碼代表對特定使用者的邀請。 類型特定資料包括來源使用者、目標使用者,以及描述邀請的內容字串,例如特定的遊戲模式。 邀請控制代碼會授與開放工作階段的讀寫存取權。 如果工作階段已關閉,控制代碼會授與唯讀的工作階段存取權。
即使工作階段已滿或已關閉,MPSD 也可以建立邀請。

建立邀請控制代碼

若要建立邀請控制代碼,遊戲會呼叫 XblMultiplayerSendInvitesAsync。 此方法會以通知的形式將邀請傳送給指定的使用者,收件者可以對通知採取動作以接受邀請。

建立活動控制代碼

若要建立活動控制代碼,遊戲會呼叫 XblMultiplayerSetActivityAsync。 MPSD 會將新的控制代碼識別碼設為工作階段成員的繫結活動。 如果先前有繫結活動,MPSD 會刪除對應的控制代碼。 當作用中成員變成非作用中或離開工作階段時,MPSD 會刪除繫結的活動控制代碼。

使用控制代碼

當使用者接受邀請 (邀請控制代碼) 以及使用者加入好友目前的活動 (活動控制代碼) 時,遊戲會使用控制代碼。 在這兩種情況下,遊戲都必須採取下列動作。
  1. 從遊戲啟用參數取得控制代碼識別碼。
  2. 建立本機 MPSD 工作階段物件,然後以作用中身分加入。
  3. 寫入工作階段,並傳入適當的控制代碼。
返回本主題頂端。

工作階段更新的同步處理

工作階段是共用資源,任何成員都可以建立或更新。因此,可能會發生衝突的寫入。 例如,如果某個遊戲覆寫了另一個遊戲所做的變更,就可能導致非預期的結果。 MPSD 解決這些衝突的方法,是支援開放式並行存取與讀取-修改-寫入模式。 MPSD 對工作階段更新的同步處理使用兩種相關的高階實作模式。
  • 由仲裁者更新工作階段的共用部分。如果您的實作只涉及單一仲裁者,大部分的寫入作業都可以避免使用同步處理更新。在下列情況下,遊戲可以避免同步處理。
    • 仲裁者對工作階段共用部分所做的任何更新,除非這些更新與傳達仲裁者的身分識別有關
    • 遊戲對工作階段內成員區域所做的任何更新
    [!NOTE] 雖然前述的更新類型不需要同步處理,但對 XblMultiplayerSessionProperties::HostDeviceToken 屬性的任何更新仍必須進行同步處理。 此屬性用於傳達仲裁者的身分識別,例如作為仲裁者移轉的一部分。
  • 所有用戶端都會更新工作階段的共用部分。在此情況下,對工作階段共用部分的所有更新都必須同步處理。不過,遊戲仍然可以在不同步處理的情況下寫入自己的成員區域。

使用多人遊戲 API 更新工作階段同步處理

下列多人遊戲 API 方法實作了開放式並行存取。 每個寫入方法都接受 XblMultiplayerSessionWriteMode 值。 傳遞 SynchronizedUpdate 值會對更新使用開放式並行存取。 列舉中的其他值有助於在初次建立工作階段時解決可能的衝突。 對 MPSD 工作階段中可能被其他遊戲寫入之部分的任何寫入,都必須使用同步處理更新。 不過,並非所有寫入都必須受到保護。 如果您的遊戲嘗試使用其中一個寫入工作階段方法將本機工作階段物件寫入 MPSD,可能會收到 HTTP/412 狀態碼。在此情況下,它應該先發出 XblMultiplayerGetSessionAsync 呼叫來重新整理本機複本,取得工作階段最新的伺服器版本,然後再次嘗試寫入。 否則,本機工作階段文件會繼續包含錯誤的資料,而寫入工作階段的呼叫也會繼續失敗。
當遊戲呼叫其中一個寫入工作階段方法時,可能會傳回已更新的工作階段版本。 如果傳回了已更新的工作階段版本,遊戲應該以執行緒安全的方式,將本機快取的複本取代為新版本。

使用多人遊戲 REST API 更新工作階段同步處理

MPSD 透過 REST 功能,使用具有 ETag 設定的 HTTP「if-match」標頭以及讀取-修改-寫入模式,在工作階段更新中支援開放式並行存取。 在寫入要求中傳遞的 ETag,應該是 MPSD 在前一個讀取要求中傳回的 ETag。 返回本主題頂端。

呼叫 MPSD

遊戲可以透過下列方式存取 MPSD,以使用多人遊戲系統與配對。
  • 建議您使用多人遊戲 API,其中包含作為 RESTful 功能包裝函式的類別。如需詳細資訊,請參閱 XblMultiplayer 首碼函式。若要進行 SmartMatch 配對,請使用以 XblMatchmaking 首碼函式表示的配對 API。
  • 直接使用標準 HTTP 呼叫 XBOX 服務 RESTful 參考中所包含的多人遊戲與配對 REST API。適用的 URI 說明於 Session Directory URI (適用於多人遊戲) 與 Matchmaking URI (適用於配對) 章節中。相關的 JSON 物件說明於 JavaScript Object Notation (JSON) 物件參考章節中。

使用多人遊戲 API 呼叫 MPSD

建議您使用 XSAPI 中的多人遊戲與配對 API 來呼叫 MPSD。
這些範例是使用多人遊戲與配對 API 以及 XSAPI 的其他元素撰寫的。
使用基礎 REST 功能的包裝函式程式碼,讓您能以較傳統的方式使用用戶端 API 方法,而不需要為每個呼叫處理 HTTP 流量。

使用多人遊戲 REST API 與 MPSD 互動

遊戲或其服務可以使用標準 HTTP 呼叫多人遊戲 REST API 與配對 REST API。 直接使用 REST 功能時,呼叫者會針對大多數動作,對工作階段目錄 URI 發出 DELETE、PUT、POST 與 GET 呼叫。 在 PUT 要求中,要求本文會合併至現有的工作階段。 如果沒有現有的工作階段,則會使用要求本文以及儲存在 Partner Center 上的工作階段範本來建立新的工作階段。 所有欄位都是選擇性的,只需要指定差異。 因此,{} 是零差異的有效 PUT 要求。 若要執行假設性的 PUT 要求,傳回合併結果但不影響伺服器上工作階段的正式複本,您可以將查詢字串 ?nocommit=true 附加至 PUT 要求。 多人遊戲與配對 REST API 方法的要求與回應都是 JSON 文件。 如需多人遊戲工作階段要求結構,請參閱 MultiplayerSessionRequest (JSON)。 相關聯的回應結構顯示於 MultiplayerSession (JSON)。 回應結構會將工作階段成員組織為連結串列,並填入工作階段及其成員的其他唯讀屬性。

查詢工作階段與工作階段範本 (REST)

您的遊戲可以在服務設定與工作階段範本層級查詢工作階段資訊。 本節說明使用多人遊戲 REST API 的查詢。

查詢基本工作階段資訊

您可以使用工作階段目錄與配對 URI 設定基本工作階段資訊的查詢。 查詢的結果是工作階段參考的 JSON 陣列,其中內嵌包含部分工作階段資料。 根據預設,查詢最多會擷取 100 個非私人工作階段。
每個查詢都必須包含關鍵字篩選、XUID 篩選,或兩者兼具。

查詢工作階段範本

若要擷取 SCID 的工作階段範本清單,以及特定工作階段範本的詳細資料,請對下列其中一個 URI 使用 GET 方法。
  • /serviceconfigs//sessiontemplates
  • /serviceconfigs//sessiontemplates/

查詢工作階段狀態

若要查詢工作階段狀態,請對下列其中一個 URI 使用 GET 方法。
  • /serviceconfigs//sessions
  • /serviceconfigs//sessiontemplates//sessions
返回本主題頂端。

Multiplayer Session Explorer

Multiplayer Session Explorer 是內建於 MPSD 的工具,用於瀏覽工作階段、工作階段範本與當地語系化字串。 此工具僅供開發沙箱使用。

存取 Multiplayer Session Explorer

若要使用此工具,您必須登入。您只能瀏覽以登入使用者為成員的工作階段。
若要存取 Multiplayer Session Explorer,請在 XBOX One (或更新版本) 主機上開啟瀏覽器,按下 檢視 按鈕,然後在 網址 方塊中輸入 *https://sessiondirectory.xboxlive.com/debug*。
如果您嘗試在 RETAIL 沙箱中存取此工具,將會收到 HTTP/404 狀態碼。如需此狀態碼的詳細資訊,請參閱多人遊戲工作階段狀態碼。

開啟主頁面

  1. 開啟工具的主頁面。它會顯示安全性內容 (登入的使用者與沙箱) 以及沙箱中的 SCID 清單。
  2. 按下 功能表 按鈕,將此頁面釘選到首頁,這樣就不必重新輸入 URI。

顯示可用的工作階段與範本

  1. 在工具中選取 SCID,以顯示該 SCID 中包含登入使用者為成員的工作階段清單。
  2. 在同一頁面上,您可以選取 SCID,並顯示該 SCID 服務設定中的工作階段範本與當地語系化字串。這些項目是透過 Partner Center 擷取的。

顯示工作階段的完整內容

在 Multiplayer Session Explorer 中,選取工作階段名稱以顯示對應工作階段的完整內容。 基於下列原因,MPSD 所顯示的工作階段,可能與對工作階段 URI 使用標準 GET 方法所得到的回應不同。
  • GET 呼叫可能在 X-Xbl-Contract-Version 標頭中使用較舊的合約版本。Multiplayer Session Explorer 一律使用最新的合約版本顯示工作階段。
  • 當透過 GET 正常要求工作階段時,可能會觸發轉換與副作用,例如逾時到期。Multiplayer Session Explorer 會顯示工作階段儲存時的快照,而不會執行任何邏輯、轉換或副作用。
  • MPSD 工作階段上不會出現 nextTimer JSON 物件欄位,因為它是與副作用同時計算的。
返回本主題頂端。

另請參閱

返回本主題頂端。
最後修改於 2026年10月20日