転送動作の構成
PlayFab Party のネットワーク機能には、ネイティブ プラットフォームのユーザー データグラム プロトコル (UDP) 機能を拡張し、リアルタイム・マルチプレイヤー・ゲームに最適なデータグラム転送機能が用意されています。
伝送制御プロトコル (TCP) は信頼性の高いストリームを提供し、UDP は信頼性の低いデータグラムを提供しますが、Party のネットワーク動作はデータグラムごとに構成できます。 PartyLocalEndpoint::SendMessage を使用して、ローカルの Party エンドポイントからリモートのエンドポイントにデータグラムを送信する場合、PartySendMessageOptions を指定して、希望する転送動作を微調整することができます。
次の機能が使用できます。
-
保証された配信 -
GuaranteedDelivery
フラグは、メッセージがすべてのターゲットに届くことを保証し、環境によるパケット損失を軽減するために、必要に応じて暗黙のうちにデータを再送信します。 このオプション フラグは、重要な状態情報を送信する場合に、常に宛先に配信される必要があり、そうでない場合はターゲットをネットワークから削除する必要がある場合に有効です。 既定のオプションはBestEffortDelivery
で、UDP のような一度設定すれば何もする必要のない動作を提供します。 -
順次配信 - このローカル・エンドポイントからターゲット・エンドポイントに順次送信された他のメッセージを基準として、メッセージの配信を指示します。 このオプション フラグは、特定の順序で宛先に届く必要がある状態の情報を送信する場合に使用します。 そのため、ネットワークの効率が若干悪く、環境によるパケット損失や並び替えが発生した場合には、すべてのパケットを受信するまでの待機時間が長くなる可能性があります。
SequentialDelivery
とGuaranteedDelivery
を併用すると、先に順次送信したメッセージが届くを待つ間に、ターゲット エンドポイントでメッセージがキューに入ってしまう場合があります。 このため、環境によるパケット損失や並び替えが発生した場合、遅延が長くなると感じられる場合がありますが、ターゲット エンドポイントでは、常にすべてのメッセージが、送信されたときと同じ順番で表示されます。 このパフォーマンスのトレードオフは、TCP のようなプロトコルに共通するもので、head-of-line blocking と呼ばれることもあります。 -
合体 - Party ライブラリは、環境でサポートされた最大サイズを超える大きなメッセージを自動的に断片化して再構成するので、発信者が管理する必要はありません。 ただし、多数の小さなデータグラムを送信している場合、複数のメッセージを 1 つのパケットにまとめることで、帯域幅の効率を最大限に高めることができます (パケットあたりのオーバーヘッドを削減できます) が、合体させるためにメッセージの送信を遅らせると、メッセージの遅延が発生する可能性があります。
CoalesceOpportunistically
フラグ (既定の合体オプション) を使用して送信すると、Party ライブラリは、キューに入っている他のメッセージがある場合はそのメッセージと合体させますが、このメッセージがすぐに送信できる場合は、メッセージを待つことはありません。AlwaysCoalesceUntilFlushed
フラグを使用して送信すると、PartyLocalEndpoint::FlushMessages が呼び出されるまで、Party ライブラリは転送を遅らせます。この時点で、キューに入れられていたメッセージがまとめて送信されます。
ネットワーク統計情報とローカル キュー
メッセージ送信のオプションやネットワークの状態によっては、Party が送信前にメッセージをローカルでキューに入れる場合があります。 このローカル キューは、待機時間が発生しないように慎重に管理されています。 これは、Party がプレイヤーのネットワークに殺到しないようにし、合体などの機能を適用できるようにするために必要です。
PartyNetwork::GetNetworkStatistics では、Party リレー サービスへの待機時間など、ネットワーク パフォーマンスの集計データを収集できます。 PartyLocalEndpoint::GetEndpointStatistics では、特定のリモート エンドポイントに対するキューおよびパケット損失の統計情報を可視化できます。