同步策略
帧同步
- 定点数(操作系统级):小数点位置不变,通常为纯整数或纯小数
- 浮点数(操作系统级别):额外使用尾数和阶码表示的一种小数点位置可变的数据
- IEEE754: 1985年intel 8087芯片使用的通用的浮点数表示标准
浮点数有IEEE 754标准实现,但各种编程语言、编译器。CPU指令集在浮点运算取舍实现上各不相同。 帧同步服务器支付作为转发玩家操作指令,为了保证客户端表现的一致性,就需要定点数来实现进而消除精度上的损失,最终导致很巨大偏差的产生。
- 定点数(应用级):使用确定精度的整形,长整形实现浮点精度的一种数据结构,因为是应用级的实现,在任意编程语言、编译器和CPU指令集上的计算结果都保持一致。
简单来说,就是在电脑硬件计算上对数据的存储方式有着不同规范的区别,所以在Application层面里将底层硬件上对数据存储的方式进行一个重新计算进行更广泛的适配。人为通过整数来模拟定点数的实现来的到相同的运算结果。
状态同步
定义 :只有当数据状态发生变化的时候才进行同步,将数据的变化量发送给客户端。状态同步没有逻辑帧的概念,底层有Tick帧计数器,但并不存在帧号的概念。
状态帧同步
定义:按固定的逻辑帧搜集变化的状态数据并进行网络同步。
常见案例
- ACT类游戏,为及时响应打击感在客户端使用定点数,按照逻辑帧驱动游戏运行,服务端只同步玩家输入的指令(帧同步)
- MMORPG,为增加同屏人数,使用服务端运行全量逻辑方案,只同步玩家释放技能指令,血量变化,蓝量改变等状态数据来优化带宽占用。(状态同步)
- MOBA类游戏,为了应对恶劣的网络环境与优化带宽,使用自定义可靠UDP方案,按帧同步数据,在本地使用定点数,服务器运行全量战斗逻辑判断玩家是否存在作弊行为。(帧同步)
- FPS游戏,本地与服务器同时跑全量战斗逻辑,本地可先行于服务器做预测,并按照逻辑帧来搜集同步每一帧发生变化的状态数据,当客户端发现与服务端状态不一致时进行回滚(状态帧同步)
不同同步策略特性
- 帧同步的特点是有明确的帧逻辑概念,并且按照逻辑帧来同步网络数据。
- 状态同步的特点是状态发生变化就进行同步
- 状态帧同步特点是按照逻辑帧对发生了变化的状态数据进行搜集并同步