一、同步
同步就是要多个客户端表现效果是一致的,而且对于大多数的游戏,不仅仅要表现一致,还要客户端和服务器的数据也是一致的。所以同步是个网络游戏概念,只有网络游戏才需要同步,而单机游戏是不需要同步的。
二、帧同步
帧同步的代表作当属当下最火的手游王者荣耀了吧,它就是帧同步完成的,也意味着它的核心的战斗逻辑写在客户端。帧同步经常被采用在RTS游戏(Real-Time Strategy )中。在游戏中,又客户端给服务器上传玩家的指令,服务器收到指令之后不做任何操作然后转发给所有的客户端。客户端来运算包括技能逻辑、普攻、属性,伤害、移动、Al、检测、碰撞等一系列的内容,这也是游戏中最核心和最难的部分。所有的客户端运算完成所有接收到的指令,并且修改相应的属性和对应的特效。
三、状态同步
状态同步和帧同步是相反的,它最核心的一系列东西都写在服务器端。当客户端发送要进行操作给服务器,服务器进行一系列的操作运算,然后把相应的结果发送给所有的客户端,客户端接到数据后修改属性。这里客户端相当于服务器的播放器一样,因为核心的判断都是在服务器的,一切的表现和属性都以服务器为准,就算客户端的血条是满的,服务器的血条是0,那依旧要死。
例子:一个角色要释放一个技能(非指向技能),
- 客户端告诉服务器我要释放一个技能
- 服务器通知所有客户端在某个地方以什么方向释放技能
- 客户端根据收到的信息创建一个特效放在这个地方,然后以某个方向飞行
- 服务器根据碰撞检测判断到某个时刻碰到了地方英雄,通知客户端
- 客户端根据服务器发来的信息删除特效,被打到的人减少血量播放收击特效
四、帧同步和状态同步的区别
1. 流量
状态同步的消耗的流量比帧同步要多的多,因为状态同步所有的属性都是在服务器的,当某个角色的属性变化之后都需要同步给所有客户端,而且在一些复杂一些的玩家角色的属性有上百条,这样同步下来消耗是巨大的。而帧同步不需要做属性同步,服务器只需要做一次转发操作指令,属性这些都是客户端自己计算,所以消耗少的多。
2. 回放和观战
帧同步比状态同步简单,因为只需要保存每局内所有人的操作就好了,当回放的时候只需要挨个播放这局所有的操作就好。状态同步需要有一个专门的服务器,当一局战斗打响,服务器给客户端发送消息的同时,还需要把这些消息发送给这个专门的服务器做存储,当有人看回放或者观战时,这个专门的服务器把存储起来的消息发就可以了
3. 安全性
状态同步比帧同步安全性高很多,因为状态同步的所有数据和逻辑都是在服务器端保存的,要想作弊就必须修改服务器的值,这样难度就会高很多;而帧同步所有的数据时在客户端,只要解析客户端的数据之后就可以达到自己想要的效果。
4.断线重连
帧同步的锻炼重连时比较麻烦的,当你在10分钟的时候断线了,在15分钟回来,就需要把服务器这15分钟的消息一次性的发送给客户端,然后客户端加速整个游戏的核心逻辑运算,直到追上现有进度。状态同步很简单,重新把整个场景中的任务全部重新生成一边,各种数值根据服务端提供的信息加到任务身上即可。
5. 开发效率
状态同步的游戏占主流,同一个功能至少需要一个客户端和服务器共同完成,开发起来比较困难。而帧同步服务器开发难度低,服务器只需要转发,而帧同步不需要和服务器的沟通交状态同步,开发的效率也高。