Konfigurieren des Transportverhaltens
Die Netzwerkfunktionen von PlayFab Party erweitern die UDP-Features (User Datagram Protocol) der nativen Plattform, um Datagrammtransportfunktionen bereitzustellen, die ideal für Echtzeit-Multiplayer-Spiele sind.
Während TCP (Transmission Control Protocol) zuverlässige Datenströme bereitstellt und UDP unzuverlässige Datagramme bereitstellt, kann das Netzwerkverhalten der Partei pro Datagramm konfiguriert werden. Wenn Sie PartyLocalEndpoint::SendMessage verwenden, um ein Datagramm von einem lokalen Partyendpunkt an einen Remoteendpunkt zu übertragen, können Sie PartySendMessageOptions angeben, um das gewünschte Transportverhalten zu optimieren.
Zu den Funktionen gehören:
-
Garantierte Zustellung : Das
GuaranteedDelivery
Flag stellt sicher, dass die Nachricht an allen Zielen ankommt und daten ggf. implizit erneut übermittelt wird, um den Verlust von Umgebungspaketen zu minimieren. Dieses Optionsflag funktioniert gut, wenn wichtige Zustandsinformationen gesendet werden, die immer das Ziel erreichen müssen, andernfalls sollte das Ziel aus dem Netzwerk entfernt werden. Die Standardoption istBestEffortDelivery
, die UDP-ähnliches Verhalten beim Auslösen und Vergessen bereitstellt. -
Sequenzielle Zustellung : Sortiert die Übermittlung der Nachricht relativ zu anderen Nachrichten, die sequenziell von diesem lokalen Endpunkt an den Zielendpunkt gesendet wurden. Verwenden Sie dieses Optionsflag, um Zustandsinformationen zu senden, die das Ziel in einer bestimmten Sequenz erreichen müssen. Dies kann zu einer etwas geringeren Netzwerkeffizienz führen und möglicherweise länger warten, bis alle Pakete empfangen werden, wenn paketverlustend oder durch die Umgebung neu angeordnet wird. Die Verwendung von
SequentialDelivery
mitGuaranteedDelivery
kann dazu führen, dass Nachrichten auf dem Zielendpunkt in die Warteschlange gestellt werden, während sie darauf warten, dass zuvor gesendete sequenzielle Nachrichten eingehen. Dies kann zu einer wahrgenommenen Erhöhung der Latenz führen, wenn es zu einem Verlust oder einer Neuanordnung von Umgebungspaketen kommt, aber der Zielendpunkt sieht immer jede Nachricht in der gleichen Reihenfolge, in der sie gesendet wurden. Dieser Leistungsabtausch ist bei TCP-ähnlichen Protokollen üblich und wird manchmal als Head-of-Line-Blockierung bezeichnet. -
Zusammenführung : Die Parteibibliothek fragmentiert und erstellt große Nachrichten, die die maximale Größe überschreiten, die von der Umgebung unterstützt wird, automatisch fragmentiert und neu zusammen, sodass Aufrufer dies nicht verwalten müssen. Wenn Sie jedoch viele kleine Datagramme senden, ermöglicht das Zusammenfügen mehrerer Nachrichten in einem einzelnen Paket die Maximierung der Bandbreiteneffizienz (Reduzierung des Mehraufwands pro Paket) auf potenzielle Kosten der wahrgenommenen Latenz für eine Nachricht, wenn Sie die Übertragung verzögern, um eine Zusammenführung zu erreichen. Das Senden mit dem
CoalesceOpportunistically
Flag (die Standardoption für die Koaleszenz) bewirkt, dass die Parteibibliothek die Nachricht mit anderen Nachrichten in der Warteschlange zusammenfügt, sofern diese verfügbar sind, aber nicht auf weitere Nachrichten wartet, wenn diese Nachricht sofort übertragen werden kann. Das Senden mit demAlwaysCoalesceUntilFlushed
Flag bewirkt, dass die Parteibibliothek die Übertragung verzögert, bis PartyLocalEndpoint::FlushMessages aufgerufen wird. An diesem Punkt werden die nachrichten in der Warteschlange zusammengefasst und übertragen.
Netzwerkstatistiken und lokale Warteschlangen
Abhängig von den Optionen zum Senden von Nachrichten und dem Netzwerkstatus kann der Partei Nachrichten vor der Übertragung lokal in die Warteschlange stellen. Diese lokale Warteschlange wird sorgfältig verwaltet, um die Einführung von Latenz zu vermeiden. Dies ist notwendig, um sicherzustellen, dass die Partei das Netzwerk des Spielers nicht überflutet und Features wie Das Zusammenwachsen angewendet werden können.
Mit PartyNetwork::GetNetworkStatistics können Sie Daten zur aggregierten Netzwerkleistung sammeln, einschließlich der Latenz für den Party-Relaydienst. PartyLocalEndpoint::GetEndpointStatistics ermöglicht einblicke in Warteschlangen und Paketverluststatistiken für einen bestimmten Remoteendpunkt.