首页 > 代码库 > 什么是游戏中的帧同步

什么是游戏中的帧同步

游戏中的帧同步是一种客户端与服务器的同步方式,是为了实现高实时性的需求而设计的。在实时pvp游戏中,要求每个客户端高度同步,怎么做到精确的同步呢,那就是向同步的所有客户端广播同步消息。由于网络存在延迟,因此一个客户端发送消息给服务器的过程存在延迟,服务器广播同步消息给其他客户端也存在延迟,为了降低这个延迟,服务器应该尽量减少逻辑,快速地转发消息让客户端能够同步,因此在帧同步中,游戏的逻辑计算应该放到客户端来实现,服务器在收到消息后应该迅速地进行广播,而不应该做过多的逻辑计算。既然是客户端进行计算,那客户端在实现用户操作后,把操作后的状态进行同步可行不可行呢?答案是不可行,因为如果客户端先对用户指令进行计算再同步状态的话,状态信息到达其他客户端有一个网络延迟,这个延迟会导致收到消息的客户端的逻辑会滞后于发送消息的客户端。为了消除网络延迟,让所有客户端都同步显示,客户端应该发送的消息是一个指令集,指令集表示一个客户端进行了什么操作,然后这个指令集广播给所有客户端,假如所有客户端网络延迟差距不大,那么各个客户端收到指令的时间应该是非常接近的,客户端收到指令后进行逻辑计算,同样的计算得到同样的逻辑结果,这样就实现了各个客户端的同步显示。这里为了达到同样的计算得到同样结果的目的,对于随机数,我们应该保证各个客户端种子相同。游戏中玩家的操作指令集转化为网络数据流往往是比较小的,因此为了提高网络利用率,我们应该使得多个指令集转化为一个数据包进行发送,因此服务器在收到客户端指令后应该缓存起来,等待一个时间和其他指令集一起广播给其他客户端。这个时间叫做一个帧,因此这个同步过程取名为帧同步。由于帧同步是不同步状态,只同步指令的,因此对于每个客户端来说为了同步,必须收到和其他客户端同样的指令集,不能有指令集丢失的情况发生,因为一旦指令集不同,计算得出的结果显示就不同,各个客户端自然就不同步。所有在网络传输的时候我们要选择有重传机制的通信协议,如tcp或udp+kcp。假如网络很差,导致客户端断线了,那么当断线客户端重连的时候,为了与其他客户端同步,他需要知道其他客户端在他断线的时间内做了什么操作,所以服务器应该把他断线期间内所有的指令都发给重连的客户端,因此服务器需要缓存所有指令,直到帧同步结束。

什么是游戏中的帧同步