跳轉到主要內容

設定傳輸行為

PlayFab Party 的網路功能擴充了原生平台的使用者資料包通訊協定 (UDP) 功能,提供非常適合即時多人遊戲的資料包傳輸機制。 傳輸控制通訊協定 (TCP) 提供可靠的串流,而 UDP 提供不可靠的資料包;相較之下,您可以針對每個資料包設定 Party 的網路行為。當您使用 PartyLocalEndpoint::SendMessage 將資料包從本機 Party 端點傳輸至遠端端點時,請指定 PartySendMessageOptions 來微調所需的傳輸行為。 功能包括:
  • 保證傳遞:GuaranteedDelivery 旗標可確保訊息送達所有目標,必要時會隱含地重新傳輸資料,以減輕環境造成的封包遺失。當傳送一律必須到達目的地 (否則應將目標從網路中移除) 的重要狀態資訊時,此選項旗標非常適用。預設選項為 BestEffortDelivery,提供類似 UDP 的「傳送後不理」行為。
  • 循序傳遞:相對於從此本機端點循序傳送至目標端點的其他訊息,排定訊息的傳遞順序。使用此選項旗標可傳送必須依特定順序到達目的地的狀態資訊。當環境發生封包遺失或重新排序時,循序傳遞可能會導致網路效率略為降低,並需要更長時間等待接收所有封包。將 SequentialDelivery 與 GuaranteedDelivery 搭配使用,可能會導致訊息在目標端點上排入佇列,以等待先前傳送的循序訊息到達。在環境封包遺失或重新排序期間,排入佇列可能會增加感知到的延遲,但目標端點一律會依傳送順序看到每則訊息。這種效能取捨在類似 TCP 的通訊協定中很常見,有時稱為隊頭阻塞。
  • 聯合:Party 程式庫會自動分割及重組超過環境所支援大小上限的大型訊息,因此呼叫端不需要管理分割。如果您傳送許多小型資料包,聯合會將它們合併為單一封包,以提高頻寬效率,但可能會增加延遲。使用 CoalesceOpportunistically 旗標 (預設值) 傳送時,如果有其他已排入佇列的訊息,就會將該訊息與它們聯合,但如果訊息可以立即傳輸,就不會等待更多訊息。使用 AlwaysCoalesceUntilFlushed 旗標傳送時,會延遲傳輸,直到呼叫 PartyLocalEndpoint::FlushMessages 為止,此時會聯合並傳輸已排入佇列的訊息。
Party 傳輸選項

結合傳遞和排序選項

GuaranteedDelivery/BestEffortDelivery 和 SequentialDelivery/NonsequentialDelivery 選項彼此獨立,可以自由組合。每種組合都會產生不同的行為:

了解隊頭阻塞

當傳遞序列最前端的訊息尚無法取得時,就會發生隊頭阻塞。即使接收端已經擁有同一序列中的後續訊息,也無法將它們傳遞給應用程式。 與隊頭阻塞相關的選項是 SequentialDelivery,而不是 GuaranteedDelivery。循序傳遞會建立有序的序列,其中較早的訊息會阻擋較晚的訊息。GuaranteedDelivery 可能會放大這種影響,因為遺失的訊息必須重新傳輸而不是跳過,這會延長等待時間。使用 BestEffortDelivery + SequentialDelivery 時,會跳過間隙並讓序列向前推進,因此阻塞時間很短。 NonsequentialDelivery 訊息永遠不會被循序訊息阻擋。這兩種傳遞模式不會互相干擾。正在重新傳輸的保證循序訊息不會延遲非循序訊息的傳遞。

實務指引

常見的遊戲模式會同時針對不同種類的資料使用多種傳送選項:
  • GuaranteedDelivery + SequentialDelivery 用於順序和完整性很重要的遊戲狀態變更 (例如,物品欄更新、比賽狀態轉換)。
  • BestEffortDelivery + NonsequentialDelivery 用於低延遲比完整性更重要的快速變化狀態 (例如,玩家位置、瞄準方向)。
由於循序和非循序訊息彼此獨立,正在重新傳輸的狀態變更訊息不會延遲位置更新的傳遞。

多個獨立序列

每個本機端點都代表一個獨立的序列空間。從一個本機端點傳送至指定目標端點的所有循序訊息,都共用相同的順序保證。該序列內的隊頭阻塞只會影響同一序列中的其他循序訊息。 如果您需要在相同的兩部裝置之間建立多個獨立的有序串流 (例如,每個遊戲子系統一個串流),可以在每部裝置上建立多個本機端點 (上限為建立 Party 網路時在 PartyNetworkConfiguration.maxEndpointsPerDeviceCount 中指定的限制)。從不同本機端點傳送的循序訊息彼此之間沒有任何順序或傳遞關係。

網路統計資料和本機佇列

根據訊息傳送選項和網路狀態,Party 可能會在傳輸之前將訊息在本機排入佇列。此本機佇列經過謹慎管理,以避免造成延遲。排入佇列是必要的,以確保 Party 不會讓玩家的網路過載,並能套用聯合等功能。 PartyNetwork::GetNetworkStatistics 會收集整體網路效能的資料,包括至 Party 轉送服務的延遲。 PartyLocalEndpoint::GetEndpointStatistics 可讓您查看特定遠端端點的佇列和封包遺失統計資料。
最後修改於 2026年10月8日