网络同步——帧同步和状态同步解析

  • Post author:
  • Post category:其他



目录


概述


帧同步概念


状态同步概念


对比


概述

同步就是要多个客户端表现效果是一致的,而且对于大多数的游戏,不仅仅要表现一致,还要客户端和服务器的数据也是一致的。所以同步是个网络游戏概念,只有网络游戏才需要同步,而单机游戏是不需要同步的。

帧同步和状态同步是在网络游戏和多人在线应用中常见的两种同步方法,它们用于确保所有参与者看到的游戏状态一致。


帧同步概念

帧同步是一种同步方式,其中每个客户端都在相同的逻辑帧上执行相同的操作。在这种方式下,游戏状态的更新在固定时间间隔(例如,每秒30帧)内进行。

客户端只需

发送用户输入

,而无需发送整个游戏状态

。服务器会将所有客户端的输入收集在一起,并在每个逻辑帧上广播给所有客户端。

客户端在收到其他客户端的输入后,根据这些输入更新游戏状态。

适用场景:帧同步适合对

实时性要求较高

、用户交互较为频繁的游戏,如实时策略游戏、格斗游戏等。


状态同步概念

同步的是游戏中的各种状态,是指的将其他玩家的状态行为同步的方式,一帮情况下AI逻辑,技能逻辑,战斗


计算都由服务器运算,只是将运算的结果同步给客户端


,客户端只需要接受服务器传过来的状态变化,然后更新自己本地的动作状态、Buff状态,位置等就可以了。

(但是为了给玩家好的体验,减少同步的数据量,客户端也会做很多的本地运算,减少服务器同步的频率以及数据量。)

这里客户端相当于服务器的播放器一样,因为核心的判断都是在服务器的,一切的表现和属性都以服务器为准,就算客户端的血条是满的,服务器的血条是0,那依旧要死。

适用场景:状态同步适合对实时性要求较低、状态变化较少的游戏,如回合制策略游戏、棋类游戏等。

实例:一个角色要释放一个技能(非指向技能),

客户端告诉服务器我要释放一个技能

服务器通知所有客户端在某个地方以什么方向释放技能

客户端根据收到的信息创建一个特效放在这个地方,然后以某个方向飞行

服务器根据碰撞检测判断到某个时刻碰到了地方英雄,通知客户端

客户端根据服务器发来的信息删除特效,被打到的人减少血量播放收击特效

对比

选择帧同步还是状态同步取决于以下因素:

  • 实时性要求:帧同步更适合实时性要求高的游戏,状态同步适用于实时性要求较低的游戏。
  • 网络带宽和延迟:帧同步对延迟和网络的带宽要求较高,而状态同步对延迟和网络的带宽要求相对较低。
  • 游戏类型和交互复杂性:

    帧同步更适合用户交互频繁

    的游戏,状态同步适用于状态变化较少的游戏。
  • 容错性:帧同步对客户端和服务器之间的

    同步精度要求较高

    ,容错性较低。状态同步在一定程度上可以容忍不同客户端之间的状态差异。


帧同步只需要接受输入和输出,在客户端上进行逻辑运算,因此传播流量小,速度快,实时性高。状态同步则需要将玩家的状态各种信息也要传输,因而流量大,速度慢。


回放和观战


帧同步比状态同步简单,因为只需要保存每局内所有人的操作就好了,当回放的时候只需要挨个播放这局所有的操作就好。状态同步需要有一个专门的服务器,当一局战斗打响,服务器给客户端发送消息的同时,还需要把这些消息发送给这个专门的服务器做存储,当有人看回放或者观战时,这个专门的服务器把存储起来的消息发就可以了


开发效率


状态同步的游戏占主流,同一个功能至少需要一个客户端和服务器共同完成,开发起来比较困难。而帧同步服务器开发难度低,服务器只需要转发,而帧同步不需要和服务器的沟通交状态同步,开发的效率也高。


断线重连


帧同步的锻炼重连时比较麻烦的,当你在10分钟的时候断线了,在15分钟回来,就需要把服务器这15分钟的消息一次性的发送给客户端,然后客户端加速整个游戏的核心逻辑运算,直到追上现有进度。状态同步很简单,重新把整个场景中的任务全部重新生成一边,各种数值根据服务端提供的信息加到任务身上即可。


安全性


状态同步比帧同步安全性高很多,因为状态同步的所有数据和逻辑都是在服务器端保存的,要想作弊就必须修改服务器的值,这样难度就会高很多;而帧同步所有的数据时在客户端,只要解析客户端的数据之后就可以达到自己想要的效果。



版权声明:本文为weixin_43757333原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。