> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 傳輸選項

> 比較 PlayFab Party 的傳輸選項，包括透明雲端轉送和直接對等連線，以及各自對延遲、NAT 和可靠性的影響。

# 設定傳輸行為

PlayFab Party 的網路功能擴充了原生平台的使用者資料包通訊協定 (UDP) 功能，提供非常適合即時多人遊戲的資料包傳輸機制。

傳輸控制通訊協定 (TCP) 提供可靠的串流，而 UDP 提供不可靠的資料包；相較之下，您可以針對每個資料包設定 Party 的網路行為。當您使用 [PartyLocalEndpoint::SendMessage](/zh-TW/services/playfab/multiplayer/networking/reference/classes/PartyLocalEndpoint/methods/partylocalendpoint_sendmessage) 將資料包從本機 Party 端點傳輸至遠端端點時，請指定 [PartySendMessageOptions](/zh-TW/services/playfab/multiplayer/networking/reference/enums/partysendmessageoptions) 來微調所需的傳輸行為。

功能包括：

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

<img src="https://mintcdn.com/microsoft-4404708b/dqv53299jA1M-fNi/images/playfab/multiplayer/networking/party-networking-options.png?fit=max&auto=format&n=dqv53299jA1M-fNi&q=85&s=425329288a87d5e8de651901cba334eb" alt="Party 傳輸選項" width="470" height="325" data-path="images/playfab/multiplayer/networking/party-networking-options.png" />

## 結合傳遞和排序選項

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

| 傳遞 | 排序 | 行為 |
| - | - | - |
| `GuaranteedDelivery` | `SequentialDelivery` | 可靠且有序。每則訊息都會依傳送順序到達。如果訊息在傳輸過程中遺失，後續的循序訊息會在接收端排入佇列，直到遺失的訊息重新傳輸並傳遞為止。最容易受到隊頭阻塞的影響。 |
| `GuaranteedDelivery` | `NonsequentialDelivery` | 可靠且無序。每則訊息都會到達，但無論傳送順序為何，每則訊息一到達就會傳遞給應用程式。沒有隊頭阻塞。 |
| `BestEffortDelivery` | `SequentialDelivery` | 不可靠且有序。訊息會依序傳遞，但允許有間隙。如果某則訊息在較晚的循序訊息已傳遞之後才到達，則會捨棄這則遲到的訊息。序列一律向前推進。 |
| `BestEffortDelivery` | `NonsequentialDelivery` | 不可靠且無序 (預設值)。傳送後不理——每則訊息一到達就會傳遞，沒有任何順序或傳遞保證。延遲最低。 |

### 了解隊頭阻塞

當傳遞序列最前端的訊息尚無法取得時，就會發生隊頭阻塞。即使接收端已經擁有同一序列中的後續訊息，也無法將它們傳遞給應用程式。

與隊頭阻塞相關的選項是 **`SequentialDelivery`**，而不是 `GuaranteedDelivery`。循序傳遞會建立有序的序列，其中較早的訊息會阻擋較晚的訊息。`GuaranteedDelivery` 可能會*放大*這種影響，因為遺失的訊息必須重新傳輸而不是跳過，這會延長等待時間。使用 `BestEffortDelivery` + `SequentialDelivery` 時，會跳過間隙並讓序列向前推進，因此阻塞時間很短。

`NonsequentialDelivery` 訊息永遠不會被循序訊息阻擋。這兩種傳遞模式不會互相干擾。正在重新傳輸的保證循序訊息不會延遲非循序訊息的傳遞。

### 實務指引

常見的遊戲模式會同時針對不同種類的資料使用多種傳送選項：

* **`GuaranteedDelivery` + `SequentialDelivery`** 用於順序和完整性很重要的遊戲狀態變更 (例如，物品欄更新、比賽狀態轉換)。
* **`BestEffortDelivery` + `NonsequentialDelivery`** 用於低延遲比完整性更重要的快速變化狀態 (例如，玩家位置、瞄準方向)。

由於循序和非循序訊息彼此獨立，正在重新傳輸的狀態變更訊息不會延遲位置更新的傳遞。

### 多個獨立序列

每個本機端點都代表一個獨立的序列空間。從一個本機端點傳送至指定目標端點的所有循序訊息，都共用相同的順序保證。該序列內的隊頭阻塞只會影響同一序列中的其他循序訊息。

如果您需要在相同的兩部裝置之間建立多個獨立的有序串流 (例如，每個遊戲子系統一個串流)，可以在每部裝置上建立多個本機端點 (上限為建立 Party 網路時在 `PartyNetworkConfiguration.maxEndpointsPerDeviceCount` 中指定的限制)。從不同本機端點傳送的循序訊息彼此之間沒有任何順序或傳遞關係。

## 網路統計資料和本機佇列

根據訊息傳送選項和網路狀態，Party 可能會在傳輸之前將訊息在本機排入佇列。此本機佇列經過謹慎管理，以避免造成延遲。排入佇列是必要的，以確保 Party 不會讓玩家的網路過載，並能套用聯合等功能。

[PartyNetwork::GetNetworkStatistics](/zh-TW/services/playfab/multiplayer/networking/reference/classes/PartyNetwork/methods/partynetwork_getnetworkstatistics) 會收集整體網路效能的資料，包括至 Party 轉送服務的延遲。

[PartyLocalEndpoint::GetEndpointStatistics](/zh-TW/services/playfab/multiplayer/networking/reference/classes/PartyLocalEndpoint/methods/partylocalendpoint_getendpointstatistics) 可讓您查看特定遠端端點的佇列和封包遺失統計資料。


## Related topics

- [PlayFab Party 功能](/zh-TW/services/playfab/multiplayer/networking/party-features.md)
- [XBOX 服務遊戲的 PlayFab 整合](/zh-TW/services/xbox-services/playfab-integration.md)
- [傳輸通訊協定服務 (XbtpLinkSvc.exe)](/zh-TW/tools/tools-console/commandlinetools/xbtplinksvc.md)
- [PartyVoiceAudioOptions](/zh-TW/services/playfab/multiplayer/networking/reference/enums/partyvoiceaudiooptions.md)
- [PartySendMessageOptions](/zh-TW/services/playfab/multiplayer/networking/reference/enums/partysendmessageoptions.md)
