> ## 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 のネットワーク機能は、ネイティブ プラットフォームの User Datagram Protocol (UDP) 機能を拡張し、リアルタイム マルチプレイヤー ゲームに理想的なデータグラム トランスポート機能を提供します。

Transmission Control Protocol (TCP) が信頼性のあるストリームを提供し、UDP が信頼性のないデータグラムを提供するのに対し、Party のネットワーク動作はデータグラムごとに構成できます。[PartyLocalEndpoint::SendMessage](/services/playfab/multiplayer/networking/reference/classes/PartyLocalEndpoint/methods/partylocalendpoint_sendmessage) を使用してローカルの Party エンドポイントからリモート エンドポイントにデータグラムを送信する場合、[PartySendMessageOptions](/services/playfab/multiplayer/networking/reference/enums/partysendmessageoptions) を指定して目的のトランスポート動作を細かく調整します。

機能には以下が含まれます。

* **配信保証**: `GuaranteedDelivery` フラグは、メッセージがすべてのターゲットに到達することを保証し、環境的なパケット ロスを緩和するために必要に応じてデータを暗黙的に再送信します。このオプション フラグは、常に宛先に到達しなければならず、そうでなければターゲットをネットワークから削除すべき重要な状態情報を送信する場合に効果的です。既定のオプションは `BestEffortDelivery` で、UDP のような送りっぱなし (fire-and-forget) の動作を提供します。
* **順次配信**: このローカル エンドポイントからターゲット エンドポイントに順次送信された他のメッセージに対して、メッセージの配信順序を設定します。特定の順序で宛先に到達しなければならない状態情報を送信するには、このオプション フラグを使用します。順次配信は、ネットワーク効率がわずかに低下する可能性があり、環境によるパケット ロスや順序の並び替えがある場合にすべてのパケットを受信するまでの待機時間が長くなる可能性があります。`SequentialDelivery` を `GuaranteedDelivery` と併用すると、以前に送信された順次メッセージの到着を待っている間、ターゲット エンドポイントでメッセージがキューイングされる場合があります。キューイングは、環境的なパケット ロスや順序の並び替え中に体感レイテンシを増加させる可能性がありますが、ターゲット エンドポイントは常に送信された順序ですべてのメッセージを認識します。このパフォーマンスのトレードオフは TCP のようなプロトコルで一般的で、[ヘッドオブライン ブロッキング](https://wikipedia.org/wiki/Head-of-line_blocking) と呼ばれることもあります。
* **コアレシング (結合)**: Party ライブラリは、環境でサポートされる最大サイズを超える大きなメッセージを自動的にフラグメント化して再構成するため、呼び出し元がフラグメント化を管理する必要はありません。多数の小さいデータグラムを送信している場合、コアレシングによってそれらを 1 つのパケットに結合し、レイテンシが追加される可能性はあるものの帯域幅効率が向上します。`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` | 信頼性なしで順序なし (既定)。送りっぱなし — 各メッセージは到着次第配信され、順序や配信の保証はありません。最低のレイテンシです。                                                                  |

### ヘッドオブライン ブロッキングの理解

ヘッドオブライン ブロッキングは、配信シーケンスの先頭にあるメッセージがまだ利用できないときに発生します。同じシーケンス内の後続のメッセージは、受信側が既にそれらを持っていても、アプリケーションに配信できません。

ヘッドオブライン ブロッキングに関係するオプションは、`GuaranteedDelivery` ではなく **`SequentialDelivery`** です。順次配信は、以前のメッセージが後続のメッセージをブロックする順序付きシーケンスを作成します。`GuaranteedDelivery` は、失われたメッセージがスキップされずに再送されなければならないため、影響を*誇張*する可能性があり、待機時間が延びます。`BestEffortDelivery` + `SequentialDelivery` では、抜けがスキップされてシーケンスが前に進むため、ブロッキング ウィンドウは短くなります。

`NonsequentialDelivery` メッセージは順次メッセージによってブロックされることはありません。2 つの配信モードは互いに干渉しません。再送中の配信保証付き順次メッセージが、順次でないメッセージの配信を遅らせることはありません。

### 実用的なガイダンス

一般的なゲーム パターンでは、異なる種類のデータに対して複数の送信オプションを同時に使用します。

* **`GuaranteedDelivery` + `SequentialDelivery`**: 順序と完全性が重要なゲーム状態変更 (例: インベントリ更新、マッチ状態遷移) に使用します。
* **`BestEffortDelivery` + `NonsequentialDelivery`**: 完全性よりも低レイテンシが重要な、急速に変化する状態 (例: プレイヤーの位置、照準方向) に使用します。

順次メッセージと非順次メッセージは独立しているため、再送中の状態変更メッセージが位置更新の配信を遅らせることはありません。

### 複数の独立したシーケンス

各ローカル エンドポイントは独立したシーケンス空間を表します。1 つのローカル エンドポイントから特定のターゲット エンドポイントに送信されるすべての順次メッセージは、同じ順序保証を共有します。そのシーケンス内のヘッドオブライン ブロッキングは、同じシーケンス内の他の順次メッセージにのみ影響します。

同じ 2 つのデバイス間で複数の独立した順序付きストリーム (例: ゲーム サブシステムごとに 1 つのストリーム) が必要な場合、各デバイス上に (Party ネットワーク作成時に `PartyNetworkConfiguration.maxEndpointsPerDeviceCount` で指定した制限まで) 複数のローカル エンドポイントを作成できます。異なるローカル エンドポイントから送信される順次メッセージ間には、順序や配信の関係はありません。

## ネットワーク統計とローカル キューイング

メッセージ送信オプションとネットワーク状態に応じて、Party は送信前にメッセージをローカルにキューイングする場合があります。このローカル キューイングは、レイテンシを増加させないように慎重に管理されます。キューイングは、Party がプレイヤーのネットワークを氾濫させないようにし、コアレシングのような機能を適用できるようにするために必要です。

[PartyNetwork::GetNetworkStatistics](/services/playfab/multiplayer/networking/reference/classes/PartyNetwork/methods/partynetwork_getnetworkstatistics) は、Party リレー サービスへのレイテンシを含む、ネットワーク パフォーマンス全体に関するデータを収集します。

[PartyLocalEndpoint::GetEndpointStatistics](/services/playfab/multiplayer/networking/reference/classes/PartyLocalEndpoint/methods/partylocalendpoint_getendpointstatistics) は、特定のリモート エンドポイントに対するキューイングとパケット ロスの統計を可視化します。


## Related topics

- [PlayFab Party features](/ja-jp/services/playfab/multiplayer/networking/party-features.md)
- [XBOX サービス タイトル向け PlayFab インテグレーション](/ja-jp/services/xbox-services/playfab-integration.md)
- [エラーコード](/ja-jp/reference/errorcodes.md)
- [xCurl の概要](/ja-jp/build/console-features/networking/web-requests/intro-xcurl.md)
- [オプション サービス](/ja-jp/build/gdk-and-engines/optional-services.md)
