Skip to main content

トランスポート動作の構成

PlayFab Party のネットワーク機能は、ネイティブ プラットフォームの User Datagram Protocol (UDP) 機能を拡張し、リアルタイム マルチプレイヤー ゲームに理想的なデータグラム トランスポート機能を提供します。 Transmission Control Protocol (TCP) が信頼性のあるストリームを提供し、UDP が信頼性のないデータグラムを提供するのに対し、Party のネットワーク動作はデータグラムごとに構成できます。PartyLocalEndpoint::SendMessage を使用してローカルの Party エンドポイントからリモート エンドポイントにデータグラムを送信する場合、PartySendMessageOptions を指定して目的のトランスポート動作を細かく調整します。 機能には以下が含まれます。
  • 配信保証: GuaranteedDelivery フラグは、メッセージがすべてのターゲットに到達することを保証し、環境的なパケット ロスを緩和するために必要に応じてデータを暗黙的に再送信します。このオプション フラグは、常に宛先に到達しなければならず、そうでなければターゲットをネットワークから削除すべき重要な状態情報を送信する場合に効果的です。既定のオプションは BestEffortDelivery で、UDP のような送りっぱなし (fire-and-forget) の動作を提供します。
  • 順次配信: このローカル エンドポイントからターゲット エンドポイントに順次送信された他のメッセージに対して、メッセージの配信順序を設定します。特定の順序で宛先に到達しなければならない状態情報を送信するには、このオプション フラグを使用します。順次配信は、ネットワーク効率がわずかに低下する可能性があり、環境によるパケット ロスや順序の並び替えがある場合にすべてのパケットを受信するまでの待機時間が長くなる可能性があります。SequentialDeliveryGuaranteedDelivery と併用すると、以前に送信された順次メッセージの到着を待っている間、ターゲット エンドポイントでメッセージがキューイングされる場合があります。キューイングは、環境的なパケット ロスや順序の並び替え中に体感レイテンシを増加させる可能性がありますが、ターゲット エンドポイントは常に送信された順序ですべてのメッセージを認識します。このパフォーマンスのトレードオフは TCP のようなプロトコルで一般的で、ヘッドオブライン ブロッキング と呼ばれることもあります。
  • コアレシング (結合): Party ライブラリは、環境でサポートされる最大サイズを超える大きなメッセージを自動的にフラグメント化して再構成するため、呼び出し元がフラグメント化を管理する必要はありません。多数の小さいデータグラムを送信している場合、コアレシングによってそれらを 1 つのパケットに結合し、レイテンシが追加される可能性はあるものの帯域幅効率が向上します。CoalesceOpportunistically フラグ (既定) で送信すると、キューイングされている他のメッセージがある場合はそれらと結合しますが、メッセージがすぐに送信できる場合は追加のメッセージを待ちません。AlwaysCoalesceUntilFlushed フラグで送信すると、PartyLocalEndpoint::FlushMessages が呼び出されるまで送信が遅延され、その時点でキューイングされたメッセージが結合されて送信されます。

配信と順序付けオプションの組み合わせ

GuaranteedDelivery/BestEffortDelivery および SequentialDelivery/NonsequentialDelivery オプションは独立しており、自由に組み合わせることができます。それぞれの組み合わせは異なる動作を生み出します。

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

ヘッドオブライン ブロッキングは、配信シーケンスの先頭にあるメッセージがまだ利用できないときに発生します。同じシーケンス内の後続のメッセージは、受信側が既にそれらを持っていても、アプリケーションに配信できません。 ヘッドオブライン ブロッキングに関係するオプションは、GuaranteedDelivery ではなく SequentialDelivery です。順次配信は、以前のメッセージが後続のメッセージをブロックする順序付きシーケンスを作成します。GuaranteedDelivery は、失われたメッセージがスキップされずに再送されなければならないため、影響を誇張する可能性があり、待機時間が延びます。BestEffortDelivery + SequentialDelivery では、抜けがスキップされてシーケンスが前に進むため、ブロッキング ウィンドウは短くなります。 NonsequentialDelivery メッセージは順次メッセージによってブロックされることはありません。2 つの配信モードは互いに干渉しません。再送中の配信保証付き順次メッセージが、順次でないメッセージの配信を遅らせることはありません。

実用的なガイダンス

一般的なゲーム パターンでは、異なる種類のデータに対して複数の送信オプションを同時に使用します。
  • GuaranteedDelivery + SequentialDelivery: 順序と完全性が重要なゲーム状態変更 (例: インベントリ更新、マッチ状態遷移) に使用します。
  • BestEffortDelivery + NonsequentialDelivery: 完全性よりも低レイテンシが重要な、急速に変化する状態 (例: プレイヤーの位置、照準方向) に使用します。
順次メッセージと非順次メッセージは独立しているため、再送中の状態変更メッセージが位置更新の配信を遅らせることはありません。

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

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

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

メッセージ送信オプションとネットワーク状態に応じて、Party は送信前にメッセージをローカルにキューイングする場合があります。このローカル キューイングは、レイテンシを増加させないように慎重に管理されます。キューイングは、Party がプレイヤーのネットワークを氾濫させないようにし、コアレシングのような機能を適用できるようにするために必要です。 PartyNetwork::GetNetworkStatistics は、Party リレー サービスへのレイテンシを含む、ネットワーク パフォーマンス全体に関するデータを収集します。 PartyLocalEndpoint::GetEndpointStatistics は、特定のリモート エンドポイントに対するキューイングとパケット ロスの統計を可視化します。
最終更新日 2026年8月13日