使用服务质量 (QoS) 信标测量玩家到 Azure 的延迟
您可以将 PlayFab 多人游戏服务器部署到十几个 Azure 区域。这样做有两个原因:- 额外的区域提供冗余。如果单个 Azure 区域发生故障,玩家可以访问其他区域中的服务器。
- 额外的区域允许玩家访问 “附近” 的服务器并提供低延迟连接。
服务质量信标
PlayFab 在 PlayFab 多人游戏服务器使用的每个 Azure 区域中运行信标。这些信标将反射 UDP 流量,并可用于使用 UDP 传输测量延迟。 UDP 的使用很重要,因为大多数多人游戏都使用 UDP 传输来进行其最关键性能的游戏流量。互联网服务提供商和互联网生态系统的其他要素可能会为 UDP 与 TCP 与 ICMP 流量提供不同的性能。 这是在玩家设备上下文中使用这些信标的典型流程:- 将玩家登录到 PlayFab。这通常通过 LoginWithCustomID 或其他登录 API 完成。
- 调用 ListQoSServersForTitle。这会向 PlayFab 的 QoS 信标提供主机名。典型的实现可能会在游戏的多人游戏菜单页面上执行此过程。
- 创建一个 UDP 套接字。
- 向 QoS 服务器上的 3075 端口发送单个 UDP 数据报。消息内容必须以 0xFFFF (1111 1111 1111 1111) 开头。
- 服务器将回复一个数据报,消息内容的前 2 个字节 “翻转” 为 0x0000 (0000 0000 0000 0000)。数据报的其余内容将从初始 ping 复制。
- 测量发送 UDP 消息和接收响应之间的时间。
使用服务质量 SDK
PlayFab C# SDK 和跨平台 (CPP) SDK 提供了 QoS ping 代码的实现。您可以构建 SDK 并在您的 PC 游戏中将其用作辅助库、引用 C# NuGet 包,或将该代码用作其他平台的示例。 每个 API 都返回一个QosResult,其中包含区域的排序列表以及到每个区域的平均 ping 时间。
C#
C# SDK 中提供了 QoS API。gsdkSamples 存储库中提供了示例实现 WindowsRunnerCSharpClient。 代码位于 PlayFabQosApi.cs。 参数:timeoutMs- 应用于每次 ping 尝试的超时(以毫秒为单位)(默认值:250ms)。pingsPerRegion- 对每个区域进行的 ping 尝试次数(默认值:10)。增加此数字将增加执行时间,但会降低结果不准确的可能性。degreeOfParallelism- 并行执行的最大 ping 数(默认值:4)。增加此数字将减少执行时间,但如果此数字过大,网络争用可能会导致结果不准确。
C++
PlayFab 跨平台 (CPP) SDK 中提供了两个 QoS API。 代码位于 PlayFabQosApi.cpp。 参数:numThreads- 并行执行的最大 ping 数。增加此数字将减少执行时间,但如果此数字过大,网络争用可能会导致结果不准确。timeoutMs- 应用于每次 ping 尝试的超时(以毫秒为单位)(默认值:250ms)。
