4. 无缝分区服务器

上一章:3. 负载拆分服务器

无缝分区是 SpatialOS 的多服务器负载均衡选项之一,其运作方式不同于负载拆分。无缝分区将世界划分为多个基于网格的管辖区域,每个区域都由不同的服务器负责,每个服务器仅计算其管辖范围内的虚幻 Actor。

跨服务器 RPC

跨服务器的远程过程调用 (RPC) 有助于游戏在多服务器的无缝分区环境中运行,这类 RPC 可以让对 Actor 没有管辖权的服务器告知对该 Actor 具有管辖权的服务器对其进行更新。这在无缝分区中是必要的,因为管辖区域意味着一个服务器无法对游戏世界上的每个 Actor 进行更新,它仅能更新其管辖区域内的 Actor。

例如,玩家 1 和玩家 2 是不同管辖区域的玩家 Actor。

当玩家 1 向玩家 2 射击时,对玩家 1 具有管辖权的服务器 A 调用跨服务器 RPC。

SpatialOS 将此消息发送到对玩家 2 具有管辖权的服务器 B,然后由服务器 B 执行该 RPC,即玩家 2 的帽子被击落。

图像:跨服务器 RPC - 玩家 1 的操作会影响玩家 2,即使他们处于不同的管辖范围内 (由不同的服务器更新)

图像:跨服务器 RPC - 玩家 1 的操作会影响玩家 2,即使他们处于不同的管辖范围内 (由不同的服务器更新)

您设置跨服务器 RPC 的方式与您在虚幻引擎中设置其他 RPC 的方式相同。

下方为跨服务器 RPC 的代码示例:

1
2
UFUNCTION(CrossServer) 
 void TakeDamage(int Damage);

Actor 属性迁移

如果您的游戏使用无缝分区服务器,您需要确保实体可以在管辖区域之间无缝移动,并且相关的服务器可以计算它们。

在虚幻引擎的单一服务器架构中,Actor 的管辖权仅属于单一服务器,Actor 的属性一直在该服务器的内存中。但在 SpatialOS 的多服务器环境中,随着 Actor 在游戏世界内移动,管辖权从一个服务器传递到另一个服务器,这被称为 Actor 属性迁移,允许第二个服务端 worker 实例从第一个实例停止的地方继续。您可以通过将 Handover 标记添加到 Actor 属性中来执行此设置。

图像:AI 跟踪玩家跨越两个服务器的管辖区域边界,为演示 Actor 属性迁移,AI 在每次移交管辖权时都会更改其材质

下一章:5. Inspector


最近更新时间: October 13, 2021 (e7e43c39)