wifi网络延迟解决方法 网络延迟高是什么原因


wifi网络延迟解决方法 网络延迟高是什么原因

文章插图
文章插图
网络时延是所有后台程序员的挑战,特别是对于游戏开发来说,特别是FPS或MOBA游戏,有时候,延迟可能左右一次击杀,甚至一盘游戏的胜负 。而网络延迟也常在程序员的面试题中出现:
网络延迟出现的原因是什么?有哪些方法降低网络延迟?
是什么是延迟
首先我们要明白什么是网络延迟,网络延迟是你从客户端上发出一次操作,到收到服务器响应的一个延迟时间 。举个例子:你在打王者荣耀,然后你决定不慌吃口药 。很显然吃药能否恢复生命是由后台决定的,所以,你从吃药到开始回血可能是下面这样的过程:
wifi网络延迟解决方法 网络延迟高是什么原因

文章插图
文章插图
用户点击了回血,客户端向后台发起请求针对用户的请求,会校验角色的状态(例如角色跪了肯定就不能再吃了),上次吃药的频率(1分钟才能吃1次)等业务逻辑校验没问题之后,会下发消息给客户端说可以吃药了 。客户端收到消息之后,继续吃药的动画 。
在用户发起请求,到用户收到服务端的确认请求之间的时间,我们称之为延迟 。
延迟的产生
从用户的手机,到游戏后台的服务器,是有距离的 。现在,光纤已经遍布大江南北,即便数据在光纤中的传播速度接近光的速度,从深圳到北京也是需要十来毫秒 。事实上,从你的手机上操作,访问北京服务器的数据,并非是直线访问,需要经历过非常多中间设备,不同的运营商 。在这些设备之间,可能性能参差不齐,造成延迟进一步加大 。
其次,服务器处理数据,是需要时间的,如果代码写得不合理,或者服务器性能过载,都可能增加单个请求的处理时间,从而造成延迟加剧 。
延迟优化
wifi网络延迟解决方法 网络延迟高是什么原因

文章插图
文章插图
第一个是从硬件上处理,建立专线 。如果说原先的网络环境是普通的公路,那么,专线就是高速公路,在专线上,中间设备会减少,并且带宽更大,减少数据进行绕路 。
第二个是从传输协议上,例如使用UDP协议替换TCP协议 。越来越多的游戏传输协议,从TCP切换成UDP 。由于TCP建立连接需要三次握手,并且TCP有队首阻塞问题 。在网络不稳定的时候,更容易加大延迟 。有人说,使用UDP协议,不就不可靠了么?在我们之前有一篇文章,专门介绍可靠的UDP协议传输,有兴趣可以看一下 。
第三个还是从传输协议上优化,一般来说,为了优化的性能,在客户端或服务端,我们都会使用Buffer来进行数据缓冲,带来更高的IO效率 。但是,如果Buffer过大,就可能是人为的制造延迟,所以我们可以减少Buffer的使用,或者缩小Buffer的大小 。
【wifi网络延迟解决方法 网络延迟高是什么原因】第四是服务器使用更高的更高的帧率运算 。什么是帧率呢?很多对战的游戏,并不是数据一发送到服务器,服务器就立马处理的 。如果服务器1秒钟处理30次,那么,如果一个请求到服务器的时候,上一帧刚处理完,它就需要等待33ms 。如果帧率提升到120帧,那么同样的情况,只需要等待8ms,大大减少延迟的时间 。
第五客户端提前动画或预测数据,改善用户体验 。还是上述那个吃口药的例子,我们在用户点击之后,就立马处理吃药的动画,因为绝大部分用户,都是正常的用户,发出来的请求都是合法的请求,对于少数外挂的用户,后续服务器返回进行对齐就可以了 。这种方法,实际上并没有改善延迟,但是却大大提升了用户体验 。