话说各位大神 你们遇到过因为网络抖动导致客户端的卡顿现象吗,或者说测试反馈模拟弱网环境的时候某个功能点会卡顿一下,然后通过各种定位,发现原来是一次性下发了好多包????
问题来了如果我们在一个Tick中直接一帧去处理这些包的话????????结果会怎么样呢?假如一帧的时候就是8ms,
这些包处理完成需要50ms,不就是表现出来卡顿了吗?????????
ok,下面先贴下官方卡顿本质原因:
网络抖动(Jitter)是指在网络传输过程中,数据包的传输时间在短时间内频繁变化,这种变化可能是由于网络拥塞、路由器处理延迟、物理链路不稳定等多种因素引起的。当网络抖动发生时,游戏客户端可能会遇到以下问题:
- 数据包丢失:由于抖动可能导致数据包在网络中传输的时间过长,超过了预期的接收时间,网络设备可能会丢弃这些超时的数据包,这会导致游戏客户端无法接收到完整的信息,影响游戏体验。
- 数据包重复:在网络抖动的情况下,某些数据包可能被多次发送,因为它们没有正确地被确认接收。这不仅增加了网络负载,还可能导致客户端接收到错误的信息,如角色动作重复或位置混乱。
- 延迟加剧:抖动会使数据包的到达时间变得不可预测,导致游戏中的响应时间变长,出现卡顿、延迟等问题,影响玩家的操作精度和游戏流畅度。
- 降低稳定性:频繁的网络抖动可能导致连接不稳定,严重时甚至可能导致游戏断线,需要重新连接,影响玩家的游戏进度和体验。
为了减少网络抖动对游戏的影响,通常会采用一些技术手段,如使用更稳定的网络连接、优化网络协议、设置合理的重传机制等,以保证数据的可靠传输。
ok ok 既然已经了解了卡顿的元凶,那就需要不要让他卡顿 或者至少不要太卡 怎么搞呢,办法来了,加强网络,网络无敌,不卡了,搞定。竟然不用写代码,,,,,,,,,,,,,,
麻烦来了 多个测试和老板 再次提了好几十个类型网络问题的卡顿,
怎么办法呢????????????????? 改代码把
行把 我想办法是分帧处理,
步骤如下 :
1.定义好一帧处理最大时间 比如就9ms
2.每次处理新包的时候 先看下离上次包处理时间是不是超过了9ms 如果超了直接return 滚回老家把你 ,
3.下一帧继续处理后续包…
4.没有了 卡顿看着明显修复
5.等待测试反馈