配置传输行为

PlayFab Party 的网络功能扩展了本机平台的用户数据报协议 (UDP) 功能,以提供非常适合实时多人游戏的数据报传输设施。

虽然传输控制协议 (TCP) 提供可靠的数据流,而 UDP 提供不可靠的数据报,但是可以根据数据报配置 Party 的网络行为。 当使用 PartyLocalEndpoint::SendMessage 将数据报从本地 Party 终结点传输到远程终结点时,可以指定 PartySendMessageOptions 来微调所需的传输行为。

功能包括:

  • 保证交付 - GuaranteedDelivery 标志可确保消息到达所有目标,必要时隐式重新传输数据以缓解环境数据包丢失。 当发送必须始终到达目标的重要状态信息时,此选项标志非常有用,否则应从网络中删除目标。 默认选项为 BestEffortDelivery,其提供类似于 UDP 的“发后不理”行为。
  • 顺序传递 - 相对于按顺序从本地终结点发送到目标终结点的其他消息,对消息的传递进行排序。 使用此选项标志可发送必须以特定顺序到达目标的状态信息。 这可能会导致网络效率稍微降低,并且在环境出现数据包丢失或重新排序时,可能需要等待更长的时间来接收所有数据包。 将 SequentialDeliveryGuaranteedDelivery 结合使用可能会导致消息在目标终结点上排队,同时等待先前发送的顺序消息到达。 这可能会导致在遇到环境数据包丢失或重新排序时延迟明显增加,但目标终结点始终会以发送顺序看到每条消息。 这种性能权衡对于类似 TCP 的协议很常见,有时称为“队首阻塞”。
  • 合并 - Party 库自动对超过环境支持的最大大小的大型消息进行分段和重新汇编,这样调用方就无需对此进行管理。 但是,如果你要发送许多小型数据报,则将多条消息合并到一个数据包中可以最大限度提高带宽效率(减少每数据包开销),但如果你为了合并而延迟消息传输,则可能会导致消息明显延迟。 使用 CoalesceOpportunistically 标志(默认合并选项)发送会导致 Party 库将该消息与其他排队消息(如果有)合并,但如果可以立即传输此消息,则不会等待更多消息。 使用 AlwaysCoalesceUntilFlushed 标志发送会导致 Party 库延迟传输,直到调用 PartyLocalEndpoint::FlushMessages,此时将合并并传输排队的消息。

Party 传输选项

网络统计信息和本地队列

根据消息发送选项和网络状态,Party 可能会在传输之前在本地对消息进行排队。 此本地队列经过精心管理,以避免出现延迟。 这是确保 Party 不会充斥玩家网络并且可以应用合并等功能所必需的。

PartyNetwork::GetNetworkStatistics 允许收集聚合网络性能相关数据,包括 Party 中继服务延迟。 PartyLocalEndpoint::GetEndpointStatistics 允许查看特定远程终结点的队列和数据包丢失统计信息。