了解 PlayFab 節流
PlayFab 使用固定時間範圍速率限制演算法。 對 PlayFab 發出的每個 API 要求都會轉譯為一個「索引鍵」。此索引鍵的值取決於 API 要求標頭和 API 要求本文的內容。每個個別 API 呼叫都會遞增其對應索引鍵的計數。 如果特定索引鍵在設定的時段內發出的 API 要求超過允許的數量 (速率限制),則使用該索引鍵的任何後續要求都會受到節流。PlayFab 如何判斷特定 API 要求的索引鍵
全遊戲 API 速率限制
索引鍵是遊戲識別碼。全命名空間 API 速率限制
索引鍵是命名空間識別碼,Game Manager 和較舊的 API 稱之為發行者識別碼 (Publisher ID)。命名空間是跨遊戲的玩家身分識別和共用資料範圍,而不是管理用的工作室。如需詳細資訊,請參閱 PlayFab 概念。每個實體的 API 速率限制
- 對於未經驗證/匿名的 API (例如
LoginWith[Platform]API),索引鍵是用戶端的 IP 位址。 - 對於經過驗證的 API,索引鍵取決於要求標頭和要求本文,兩者決定了 API 的呼叫實體和目標實體。
- API 的呼叫實體是與
X-Authorization權杖綁定的實體。 - API 的目標實體定義於要求本文中,且因 API 而異。若要判斷目標是哪個實體,請檢閱該特定 API 的要求本文。例如,GetUserData API 支援在其要求本文中使用 PlayFabId 指定不同的實體。
- 如果 API 本文中未指定目標實體,索引鍵就是該呼叫實體的實體識別碼。
- 如果 API 本文中指定了目標實體:
- 如果呼叫實體是 MasterPlayerAccount、TitlePlayerAccount 或 Character 實體類型 (例如 API 是使用與這些實體類型之一相關聯的
X-Authorization權杖進行驗證),索引鍵就是呼叫實體的識別碼。 - 如果呼叫實體不是上述實體類型之一,索引鍵就會變成目標實體的識別碼。
- 如果呼叫實體是 MasterPlayerAccount、TitlePlayerAccount 或 Character 實體類型 (例如 API 是使用與這些實體類型之一相關聯的
- API 的呼叫實體是與
- IP 位址為 23.192.228.80 的用戶端呼叫
Client/LoginWith[Platform]API。此 API 要求的索引鍵為 23.192.228.80。 - 用戶端呼叫
Client/LinkCustomID,並提供對應到主要玩家帳戶識別碼 408C36ADC841C0CD 的X-Authorization權杖。API 的要求本文中沒有提及其他實體識別碼。此 API 要求的索引鍵為 408C36ADC841C0CD。 - 用戶端呼叫
Client/GetUserPublisherData,並提供對應到主要玩家帳戶識別碼 D5491A06D715E817 的X-Authorization權杖。在要求本文中,用戶端提供主要玩家帳戶 25254A5AC4AEBA55 的值 (例如,要求本文包含 PlayFabId:25254A5AC4AEBA55)。此 API 要求的索引鍵為 D5491A06D715E817,因為此處的呼叫實體是主要玩家帳戶。 - 用戶端呼叫
Client/GetUserPublisherData,並提供對應到遊戲識別碼 123 的X-Authorization權杖。在要求本文中,用戶端提供主要玩家帳戶 25254A5AC4AEBA55 的值 (例如,要求本文包含 PlayFabId:25254A5AC4AEBA55)。此 API 要求的索引鍵為 25254A5AC4AEBA55,因為此處的呼叫實體是遊戲。
目標實體節流的優點
目標實體節流是一種根據目標實體類型對特定作業強制執行限制的機制。這些限制有助於維持系統穩定性並防止濫用,為使用者提供:- 一致的每位玩家限制:擴展遊戲規模不會影響個別玩家的限制,讓遊戲能夠擴大玩家基礎,而不必擔心以玩家數量為基礎的容量限制。
- 一致的玩家節流:無論遊戲上有多少使用者處於作用中狀態,玩家都會遇到相同的節流限制,讓您即使在使用者基礎很小時,也能及早偵測節流問題。
- 服務穩定性:節流可防止單一玩家的流量壓垮或不利地影響 PlayFab 服務,或多個遊戲共用的特定資料平面分割區。
檢視遊戲的 API 速率限制
您可以在 Game Manager 中查看套用至您遊戲的 API 速率限制:- 登入 Game Manager 並選取您的遊戲。
- 從左側功能表選取 Settings,然後選取 Limits。
- 選取 API Rate Limits 索引標籤。
LoginWithCustomID。
每個 API 名稱後面都會接著其限制的類型:
- (title limits):全遊戲限制。您的遊戲對該 API 的所有呼叫都會計入同一個限制。
- (namespace limits):全命名空間限制。您命名空間中的遊戲對該 API 的所有呼叫都會計入同一個限制。
- (per-entity limits):每個實體限制。每個索引鍵都會計入其各自的限制。
- 對於全遊戲和全命名空間限制,會顯示 All。
- 對於每個實體限制,會顯示索引鍵所屬實體的類型,例如
title或title_player_account。PlayFab 會由上而下檢查各列,而 Default 會套用至沒有自己專屬列的任何實體類型。
title 列和 Default 列。如果您的遊戲伺服器使用遊戲的秘密金鑰呼叫該 API,且要求未以其他實體為目標,則索引鍵就是您的遊戲識別碼,因此會套用 title 列。由於來自您後端的所有這些呼叫共用同一個索引鍵,因此它們達到限制的速度可能比來自個別玩家的呼叫快得多。如果是玩家呼叫該 API,索引鍵就是玩家的識別碼,因此會套用 Default 列。如需詳細資訊,請參閱 PlayFab 如何判斷特定 API 要求的索引鍵。
