简单聊聊FP的网络优化

修改于2022/11/021093 浏览综合
最近游戏内上线了双通道,网络优化的问题又被大家提上了比较高的讨论优先级,作为一个程序出生的同学,我还是想和大家简单说一下大家口中的 "我们到底有没有在做网络优化这件事儿"
首先对于一款以帧同步为基础的联网格斗游戏来说,战斗时候的流畅体验取决于数据包到达的稳定性以及游戏延迟,以一个逻辑帧为60帧的格斗游戏举例,最极致的体验就是要求每一帧的数据包都可以在最多16ms内到达客户端,这样大家就可以获得近似于本地游戏的体验,但这是最好的情况,真实的情况往往是这样的
1. 玩家的手机距离游戏服务器的距离直接影响了数据包到达的时间(牛顿告诉我们,时间 = 距离/速度),离游戏服务器越远,延迟就会越高,在游戏里的手感就会变得更肉,离游戏服务器越接近延迟就会越低,手感就会更即时。
所以从理论上来说这类问题最好的解决方案是吧服务器开在大家家门口,但这样做的弊端就是你们对手延迟体验会特别糟糕,所以大家通常的处理方式是为所有玩家尽可能的找一些中心点来保证延迟的公平性(当然还要云服务器厂商在这些中心点有对应的服务器才行,毕竟这个年代自建服务器的游戏研发应该几乎灭绝了吧...),所以才有了FP刚上线的时候,我们分了华中,华南,华北,华东 4个区的方案(具体是不是这四个区我记不太清了,记得的小伙伴可以指正),这样可以尽可能的保证分布在这四个区的玩家都去到一个合适延迟的机房,但很不幸的是,FP的玩家分布并不是那么的平均,分区虽然能够很好的解决区域性的延迟问题,但无法解决因为某个区域人数过少,匹配不到人的问题(当然这和游戏本身用户量没那么多也有关系),所以我们最后合区了
2. 延迟并不是唯一会影响联网战斗体验的因素,对于一款格斗游戏来说数据包的稳定性相比延迟会更加重要,如上面所说,一款60帧的格斗游戏,理论上来说帧数据的到达时间小于等于16ms才能达到体验的极限
- 假设大家的网络都是稳定的并且延迟是16ms那么数据包的到达会是
16ms - 16ms - 16ms - 16ms ....
这种情况下游戏极其顺畅稳定,并且毫无卡顿
- 但很不幸实际情况往往是这样的
16ms - 30ms - 100ms - 16ms ...
这也就是为什么大家有时候觉得自己的延迟没有问题但是游戏就是会突然卡住,没错当中因为网络的不稳定性,某一帧的数据包丢包了,一丢包就需要重发,就影响了整体帧率的稳定性 ,画面就会卡顿,当画面恢复的时候可能游戏角色已经到了另一个位置,那我们应该如何解决这类问题呢?首先我们必须知道网络为什么会不稳定
一个数据包从手机到游戏服务器会经历好几个阶段,简单来说就是:
手机->路由器(4G/5G网络基站) ->公网 ->游戏服务器所在的机房内网 -> 实际的游戏服务器,了解一些基础知识的小伙伴肯定能知道在这几个阶段里作为游戏研发,可以控制的部分几乎只有当数据包进到自己实际游戏服务器以及从手机里发出来的阶段,数据包在基站/路由器甚至各大运营商公网上发生了什么是我们无法控制的(当然坊间也有传说企鹅系游戏可以在运营商网络里通过提升自家游戏数据包的转发优先级来提升稳定性,但无论真假,很可惜这点我们做不到)
所以我们唯一能做的主要集中在以下几个方面,也是我们持续在做的
1. 发现公网质量发生问题的时候,怼我们的服务器供应商,让他们想办法优化公网质量 - 但实际情况是,公网就是不稳定的每次怼完的效果对于实际游戏体验的提升收益甚微
2. 研发层面更好的抗数据包抖动方案,因为我们只能控制自己的代码,没有办法控制运营商的网线以及大家家里的路由器,甚至大家距离移动基站的距离,所谓的抗抖动方案主要是两个:
- 尝试发送更多相同的数据包(业内应该叫数据冗余算法吧)来保证到达率,简单来说就是我们默认公网上会丢包,那我们发一个包的时候就发若干个相同的包,增加收到的可能性
- 双通道方案(最近刚上的),通过Wifi和蜂窝网络同时发包,提升包到达的稳定性,其实我们自己实测双通道对于联网体验的提升是很有帮助的,很长时间里我们公司里的Wifi也一度很不稳定,自从用了双通道,链接公司里Wifi打FP再也没有问题了,但现在双通道方案有一些兼容性问题,有些手机可能会在战斗中卡死,我们也在努力修复解决了,相信在不久的将来这个方案能极大的提升大家的联网体验
- 传统格斗游戏的Rollback NetCode,这个方案并没有被实装进手机版的FP中,原因很简单这个方案简单来说就是客户端先行,同时对未来会发生的帧数据进行一定程度的预测,当真实的帧数据到达后和本地预测结果进行对比,如果错误就需要回滚数据,但回滚数据本身需要消耗比较大的算力性能,在手机这样一个相比PC和主机性能差异过大的平台上,无法很好的保证所有玩家都能拥有这个算力,体验可能会大打折扣,未来在其他平台上我们可能会考虑实装,毕竟好的Rollback NetCode可以让玩家在联网对战时长时间保持 1-2F的延迟体验
最后:很多玩家会说我们是舍不得钱买服务器,但事实情况是无脑增加服务器性能最多让代码跑的更快(但一定有边际效应),而增加服务器数量本质是为了负载更多的玩家,这两者都无法直接提升大家的联网体验,同时在很长的时间里FP使用了大量的各种加速线路来保证大家联网的稳定性,说实话很贵,我们也投入了非常多的资源,但是实际结果是对于格斗游戏这类对联网要求很高的品类来说效果并没有那么好
说了那么多,我想表达观点很简单:
1. 格斗游戏的联网体验,特别在移动网络以及手机上确实是一个技术难题,我们很努力在解决,但并没有那么容易(也可能是我比较菜,如果大家有好的方案和经验可以告诉我,如果逻辑上成立我们会去尝试)
2. 联网体验差本质和服务器的关系没有那么大,今天但凡花钱能搞定,能让大家的网络和游戏体验变得稳定,我们一定不会吝啬使用
3. 双通道在我们目前看来是一个比较好的方案,我们会努力提升他的兼容性和稳定性,争取不久的将来大家都可以用上
4. Rolback NetCode,我们有在尝试,但是手机上会有性能瓶颈,或许以后会在PC和主机上实装
5. 我写了那么多明天星期四了!要不要V我50!
最最最后,还是感谢大家对Flash Party的热爱和一直以来的支持~~~
90
9
87