网络游戏知识——【同步算法】


前言

同步是网络游戏的一大难题,不同类型的游戏对同步有着不同程度的要求,如何解决好同步产生的问题?同步方案(帧同步,状态同步,状态帧同步)的区别和联系?网络传输协议(TCP,UDP,可靠UDP)的区别和联系?下面就让我们一起来学习下吧。


一、网络同步

1)网络同步是什么?

网络同步是指在有多个计算机或者设备连接到同一网络时,确保这些计算机和设备的时钟精准地保持一致的过程。在网络同步中,每个计算机或设备都会通过一定的协议和算法与其它计算机或设备进行时间同步,以确保设备上的时间准确,没有超前或滞后。

2)为什么进行网络同步?

网络游戏和单机游戏的区别就在于多人游戏还是单人游戏,对于网络游戏来说,时间的一致性能保证玩家的体验不会太糟。所以,需要进行网络同步来确保实时性。


二、同步带来的问题?

瞬移和卡顿:

游戏画面伴随着卡顿是很常见的,打王者荣耀有时也会发生角色移动卡顿,然后突然瞬移,穿墙到对方塔里光荣牺牲,迎来队友赞美全家的情况。

攻击判定不一致:
受击画面

玩家A的画面中,自己打中了玩家B;玩家B的画面中,玩家A没有打中自己;不管偏向于哪一方,另一方都会觉得没有游戏体验。


三、同步问题的原因?

  • 同步问题有瞬移,卡顿,攻击判定不一致;
  • 产生原因可以归结于延迟和抖动。

1)延迟

  • 百度百科定义:网络延迟是指各式各样的数据在网络介质中通过网络协议(如TCP/IP)进行传输,如果信息量过大不加以限制,超额的网络流量就会导致设备反应缓慢,造成网络延迟。
  • 网络传输中的发送端传输数据量太大就会在网络中产生拥塞,接受端不会造成网络拥塞。
  • 网络延迟 = 发送延迟 + 处理延迟 + 排队延迟+传播延迟

简单理解:想象一下过年春运的交通,你从目的地到家车上待的时间(传播延迟),中间可能要换乘,到达不同的站点,上下车,买票等(处理延迟),上车后,车上人员会根据安排找一条线路发车(发送时延),因为春运所以路上发生堵塞(网络拥塞),你不得不在站点候车(排队延迟),等待车的到来,你才能去往下一个地点。

2)抖动

  • 由于网络延迟,转发链路等的存在,数据包到达接受端的时间是不确定的,可能会发生丢包顺序错乱的情况,这就是抖动。
  • 抖动是衡量一个网络是否稳定的指标。

四、同步问题的解决?

1)解决瞬移和卡顿

如果直接设置位置,网络同步的瞬移和卡顿会很明显,思考有没有什么方案去解决瞬移和卡顿呢?

1. 服务端

方案增大同步频率
缺点增大服务器压力
效果基本达不到预期
原因抖动影响数据的同步频率,如果几条指令或者状态同时到达,还是会出现突然瞬移或者卡顿的感觉,且抖动还会影响接受频率,导致同步效果变差。

2. 客户端

方案插值算法
缺点插值缓慢移动增加延迟,直接设置位置->插值设置位置
效果由于抖动,依然存在卡顿问题
原因插值的距离由于抖动长短不一,在相同时间间隔进行插值,速度 v = s / t v=s/t v=s/t可能跳变

针对插值算法缺点进行改进,用缓存队列解决速度跳变的问题:

方案缓存队列
概念缓存队列在客户端增加一层缓存缓解网络抖动问题,数据包同时到达后先进入缓存队列,客户端依次从中取出数据且还能动态调整取出队列的快慢
缺点可能误差更大
效果已经能解决大部分网络问题

2)解决攻击判定不一致

有三种解决方案:

  1. 服务器权威为准
  2. 主动方优先,优先考虑主动攻击的玩家
  3. 被动方优先,优先考虑被动防御的玩家

如果不考虑服务器因素,主动方优先,因为被动方可能在挂机。


五、网络游戏服务器考虑因素?

主要从数据同步高并发通信协议业务逻辑热更新通信传输数据库等方面考虑。
网络游戏服务器


六、同步方案的种类?

根据服务器输入输出的内容,有三类同步方案:帧同步(指令->指令),状态同步(状态->状态),状态帧同步(指令->状态)。
分类

关于帧同步,状态同步可以参考下列内容:

下面是状态同步vs帧同步,帧同步原理的思维导图:
在这里插入图片描述


思考以下几个方面:

1)严格帧同步和乐观帧同步

帧同步

2)确定性计算

帧同步有两大难点:网路延迟确定性计算

影响确定性计算的因素:

  • 浮点数精度:直接使用整数
  • 随机数:客户端同样的伪随机算法,服务端同步随机种子
  • 遍历顺序:不要用foreach迭代
  • 多线程,异步和协程:关注执行先后顺序

帧同步必须要有相同的运行结果(相同的初始状态+ n n n个相同的指令和规则),所以一切使得同步不确定性的因素都要解决。

3)三角制约和可靠UDP

三角制约:低延迟低带宽可靠性不可三者兼得。

  • TCP:固定大小数据包,延迟高
  • UDP:报文发送,不可靠
  • 可靠UDP:在UDP基础上增加可靠性,比TCP减少延迟时间

为什么TCP产生粘包和拆包,而UDP不会产生粘包?
网络传输协议

现成的可靠UDP方案有KCP,QUIC,ENet,RakNet,UDT等。

4)断线重连和录像回放

区分同步机制(断线重连和回放,判断哪种同步机制)和常见误区:
同步判定


七、同步优化的种类?

状态同步优化


参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪华落尽见真(ಡωಡ)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值