上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.2.1 帧同步的原理与流程
最常见的网络游戏同步模式为基于C/S架构的状态同步模式。在此模式下,客户端将玩家操作请求上报到服务器,由服务器对玩家操作进行计算模拟,并向各客户端下发其需要的游戏状态数据;客户端依据收到的数据结果进行画面展示。
帧同步(lockstep)模式有别于基于C/S架构的状态同步,服务器和客户端约定将游戏逻辑时间拆分为一段段时长相同的时间片,每个时间片称为一帧(frame)。客户端将玩家操作即时发送到服务器,但服务器不进行逻辑计算,而是定期将所有玩家此段时间内的上行操作打包汇总,在每一帧结束时广播到所有客户端。各客户端定期从服务器接收所有玩家操作,在本地独立地计算所有游戏逻辑并展示。帧同步模式要求各客户端采用完全相同的计算逻辑,并且在每帧从服务器接收完全相同的输入,因此所有客户端在相同的逻辑帧时间会得到完全相同的游戏逻辑结果。
帧同步模式相较于状态同步模式,具有一致性和实时性高、开发效率高、同步数据量小等优势,因而成为MOBA、RTS等类型的游戏首选的网络同步方案。
一个典型的帧同步流程如图1.1所示。
图1.1 帧同步原理示意
在第1帧时间内,服务器未接收到客户端的上行指令,于是在结束时向客户端下发空帧作为第1帧下行帧命令,客户端A、B接收到此帧命令后,在本地将游戏逻辑推进到第1帧。同时,客户端A、B在第1帧时间内分别记录到玩家操作Cmd0、Cmd1,并立即将其发送到服务器。由于网络延迟,服务器在第2帧时间内接收到这两个操作指令,并在第2帧结束时将它们打包为帧命令并发送到客户端。客户端接收到相同的第2帧下行帧命令,分别独立地执行玩家操作和相应的逻辑运算,得到相同的第2帧逻辑状态。