- 参考 : 网络游戏同步技术概述
网络传输协议
TCP
UDP
网络同步模型
- 逻辑帧(Tick):游戏在逻辑层面是离散的过程,即可以认为是一个逻辑帧一个逻辑帧地进行逻辑运算,逻辑帧号是指游戏逻辑层面当前处于第几帧
- 渲染帧(Frame):游戏在画面呈现层面也是离散的过程,即可以认为是一幅画面一幅画面地呈现给玩家的,渲染帧号是指游戏当前呈现的是第几幅画面
- 在网络同步时,称从客户端发出信息进行网络传输的过程为上行,称客户端经过网络传输收到信息的过程为下行
- 逻辑帧的抽象
游戏在第$0$个逻辑帧时,根据玩家信息$P$和游戏配置$C$,进行初始化运算$g$,得出初始化状态集合$S_{0}$
游戏在第$k$个逻辑帧时,根据前一个状态集合$S_{k-1}$和游戏配置$C$,根据第$k$帧收到的外部变化原因集合$I_{k}$,进行逻辑$t$运算,得出第$k$个逻辑帧新的游戏状态集合$S_{k}$
$I$是游戏状态变化的根本原因的集合,往往是各个玩家操作。
- $S$是游戏状态的集合,由众多状态子集组成,其中有以下2个重要子集定义
- O = { o $\in$ S | o is an important state that can be observed by the player}
- 是一些能被玩家所明显观察到的对象的状态集合
- M = { m $\in$ S | m is an intermediate state to infer the final state}
- 为一些可用于推导最终状态的中间状态集
- O = { o $\in$ S | o is an important state that can be observed by the player}
- 一般锁步同步的本质是,上下行都仅包含游戏外部变化原因集合$I_{k}$
- 一般状态同步的本质是,下行仅包含游戏运算得出的结果状态集合$S_{k}$(更精确地说是状态子集$O_{k}$),上行包含$I_{k}$(和/或)状态子集$M_{k}$
锁步同步(Lockstep)(帧同步)
- 帧同步:帧同步指的是在游戏初始状态相同的情况下,在相同时刻输入相同操作,得到相同的结果,需要以下几点来保证:
- 初始化时随机种子要保持一致(暴击的概率表现一致)
- 更新频率相同
- 用整形替代浮点型,保证CPU计算一致
- 逻辑执行顺序一致
帧同步的流程是:
- 逻辑执行顺序一致
- 所有客户端在单位帧内进行操作并上传至服务器
- 服务器在单位帧结束时广播所有操作至客户端
- 客户端进行计算并显示至屏幕
断线重连
- 断线重连的方式为,客户端将服务端记录的所有操作进行加速播放,以达到与其他客户端同一时间