非等冪端點
重複呼叫時會產生副作用的 HTTP 方法被視為非等冪。 這表示如果用戶端呼叫端點時發生網路逾時,重試該方法並不安全,因為資源可能已經更新,但網路無法通知呼叫端已成功。 發生錯誤時,用戶端必須先查詢呼叫是否成功,而不是直接重試。 只有在呼叫不成功時,才應該重試。 在 XBOX 服務 API 中,有些 API 在內部標記為呼叫非等冪端點。 這表示如果呼叫這些端點時發生失敗,API 不會自動重試端點。 非等冪 API 的完整清單如下:- XblMatchmakingCreateMatchTicketAsync
- XblMultiplayerWriteSessionAsync
- XblMultiplayerWriteSessionByHandleAsync
- XblMultiplayerSendInvitesAsync
- XblSocialSubmitReputationFeedbackAsync
- XblSocialSubmitBatchReputationFeedbackAsync
等冪方法
另一方面,等冪 HTTP 方法不會留下副作用。 這也表示重試它們是安全的。 在 XBOX 服務 API 中,所有等冪方法都會在特定條件下自動重試。 等冪 API 的完整清單是上述未列為非等冪的所有 API。重試邏輯最佳做法
對於等冪呼叫,下列條件應該自動重試:- 所有網路錯誤
- 401: Unauthorized
- 408: RequestTimeout
- 429: Too Many Requests
- 500: InternalError
- 502: BadGateway
- 503: ServiceUnavailable
- 504: GatewayTimeout
動態調整內部 HTTP 逾時
XSAPI 會根據 XblContextSettingsGetHttpTimeoutWindow 中剩餘的時間,動態調整內部 HTTP 逾時。 內部 HTTP 逾時控制作業系統在中止之前執行 HTTP 網路作業所花費的時間。 除非 XblContextSettingsGetHttpTimeoutWindow 中至少還剩下 5 秒,讓呼叫有足夠合理的時間完成,否則不會重試呼叫。 此規則不適用於第一次呼叫,因此將 XblContextSettingsSetHttpTimeoutWindow 設定為 0 是可接受的,並會產生單一呼叫。 此邏輯的效果是讓 XblContextSettingsGetHttpTimeoutWindow 在 API 呼叫何時傳回方面更具確定性。 如果傳回了 “Retry-After” 標頭,則在到達 “Retry-After” 時間之前不會進行任何重試。 如果 “Retry-After” 時間在 XblContextSettingsGetHttpTimeoutWindow 之後,則呼叫會在 XblContextSettingsGetHttpTimeoutWindow 結束時傳回。錯誤處理
遊戲開發人員應該一律對每個服務呼叫使用適當的錯誤處理,他們需要確保正確地處理失敗的回應。 有許多現實情況可能會導致對 XBOX 服務的要求傳回失敗碼,例如:- 網路無法使用。例如,裝置失去 4G、失去 Wi-Fi,或網路中斷。
- 服務負載過高 (503)。
- 服務上發生失敗 (500)。
- 傳送至服務的要求過多 (429)。
- 寫入作業衝突 (412)。例如,多人遊戲工作階段中的另一位玩家先提交了變更。
- 使用者已遭封鎖或沒有權限。
- 使用者已登出。
最佳呼叫模式
使用批次處理要求
有些端點支援將一組要求批次處理或彙總成單一呼叫。 例如,使用 XBOX 服務的個人檔案服務,您可以要求單一使用者的個人檔案,或一組使用者的個人檔案。 因此,如果您需要一組使用者的個人檔案,針對每個使用者個人檔案逐一呼叫端點或 API 會非常沒有效率。 每次呼叫都會增加大量的驗證負擔。 因此,請改為一次將您想要取得資訊的所有使用者傳遞給 API,讓端點可以同時處理所有使用者個人檔案,並傳回單一回應。使用即時活動 (RTA) 服務,而不要輪詢
最佳做法是使用即時活動 (RTA) 服務,而不是定期輪詢。 即時活動服務會公開 Web 通訊端,在服務上的目標資源變更時傳送通知給用戶端。 RTA 服務會針對線上狀態變更、統計資料變更、多人遊戲工作階段文件變更和社交關係變更提供通知。 若要讓用戶端得知其感興趣的資訊,用戶端必須先透過 Web 通訊端訂閱該項目。 這可避免輪詢服務來偵測變更,因為您會在項目變更時確切得知。 XSAPI 將 RTA 服務公開為一組用戶端可以使用的訂閱 API。 這些 API 都有對應的*ChangedHandler API,它們會接受在項目變更時呼叫的回呼函式。
- XblPresenceSubscribeToDevicePresenceChange
- XblPresenceSubscribeToTitlePresenceChange
- XblUserStatisticsSubscribeToStatisticChange
- XblSocialSubscribeToSocialRelationshipChange
使用 XSAPI 用戶端管理員
XSAPI 有一組管理員,作為快取和狀態機,可為特定案例處理所有繁重的工作。社交管理員
社交管理員會處理好友清單和個人檔案的所有繁重工作。 社交管理員會使用 RTA 服務讓您的好友清單、他們的個人檔案及其線上狀態資料保持最新。 社交管理員公開了對遊戲引擎非常友善的同步 API。 遊戲可以經常呼叫社交管理員 API,因為社交管理員會在記憶體中維護來自服務之最新資訊的快取。 請參閱社交管理員。多人遊戲管理員
對於多人遊戲工作階段管理,多人遊戲管理員是適用於傳統多人遊戲的隨插即用解決方案。 多人遊戲管理員 API 包含玩家名冊和工作階段管理,可處理遊戲邀請、中途加入和配對,並可插入您現有的網路解決方案。 它會處理實作傳統多人遊戲流程的所有繁重工作。 請參閱多人遊戲管理員。節流 (精細速率限制)
XBOX 服務設有節流機制,以防止任何單一裝置對服務造成極端負載。 了解您的遊戲何時遭到節流非常重要。 若要判斷您的遊戲是否遭到節流,請使用下列任一方法:- 監視 HTTP 狀態碼 429
- 使用偵錯判斷提示
- 使用 XBOX 服務 Trace Analyzer 工具
