帧同步:
帧同步的概念其实简单,每个客户端都在执行相同的操作,所以最后的结果一样。
帧同步的逻辑是放在每一个客户端的,客户端将操作发送给服务器,服务器按照固定的时间内收集操作,然后将这个固定时间内收集的所有操作打包再进行转发给每个客户端后再进行下一次收集,所有客户端再通过服务器下发的操作执行逻辑,就是最初级的帧同步概念,当然服务器也可以执行逻辑进行验证操作防止作弊。
我们所谓的帧理解为一次逻辑的更新时间,就有点类似FixedTime一样,是一个固定的时间。
举个栗子:某者某耀Moba类型游戏,就是15帧的刷新率,也就是它将1秒分成了15次的逻辑更新,你所看见的60-90多帧只是表现帧数,表现帧数越高越丝滑。
注意事项:
- 保持客户端版本一致
- 谨慎使用多线程:操作系统的调度,有不确定性
- 小数的处理,保持一致:不要使用浮点数,因为在不同的硬件上浮点数的精度会不一样,因此会导致计算的状态有出入;
- 随机数处理,保持一致。游戏启动时先通过服务器同步一次随机数种子,后续各个客户端使用随机数时,随机出来的值是一致的。
大多数帧同步的逻辑是只放在每个客户端的,无论是否有操作,每一帧都会有服务器数据下发。
所以,总结帧同步优点就是:
- 服务器逻辑简单,负载低,服务器只是做接收和转发
- 研发周期低
- 一致性很强
- 同步流量小,带宽成本低,因为同步的是操作,承载的数据少
- 实时性更强