整个反馈链路从客户端开枪到服务器确认的延迟压缩到了150毫秒以内。
内部测试的时候梁永琪亲自上机试了一轮。
她在一个高延迟模拟环境里端着枪往前走,拐角处闪出一个AI敌人,她按了一下左键,子弹打出去,屏幕上弹出了红色的命中特效,敌人身上飙了一团血雾,身体往后倒下去。
她盯着屏幕看了大约两秒钟,那个AI敌人的尸体突然又站起来了,血条恢复到了满值。
她盯着那个重新站起来的敌人看了几秒,转头看着站在旁边的李轩。
“这就是‘假命中’?打中了又站起来,玩家会骂死我们的吧。”
李轩站在她椅子后面,两只手插在口袋里,视线也落在屏幕上那个已经恢复满血的敌人身上。
“这就是50毫秒和200毫秒的差距。
我们的算法已经把反馈延迟压缩到了150毫秒以内,在大部分情况下玩家感知不到这个差异,因为150毫秒的撤回窗口比人的视觉残留时间还短一些。
但刚才那个测试里模拟的是极端延迟条件,网络抖动超过了我们缓冲区的上限,校验结果来得太晚,客户端已经把命中特效播完了,服务器才说没打中,客户端只能把敌人复活。”
他把一只手从口袋里抽出来,指了指屏幕上的延迟监控面板。
“我们的算法已经把能压的都压了,但物理距离摆在那里。
华东的玩家连过来没问题,华南和华北的玩家延迟会高出一截,只要延迟超过我们的缓冲区上限,就一定会出现这种‘打中了又站起来’的情况。”
那天晚上梁永琪回到陈园的时候把这个问题从头到尾讲给了陈浩听。
她坐在书房的沙发上,两只脚搁在茶几边缘,后背靠着靠垫,把李轩说的“150毫秒”“缓冲区上限”“物理距离”这些词一个一个地复述出来。
陈浩坐在她旁边,听她说完之后把手里那杯已经凉了一半的茶放在了茶几上。
“给李轩三个月优化网络底层协议。”他说,声音不急不缓的,“如果三个月之后还压不下去,就换一种思路——分区域部署服务器。
华东、华南、华北各一组,玩家登录的时候系统自动分配离他最近的那组服务器。
物理距离才是延迟的根源,把服务器搬到玩家家门口,比在算法上抠那几十毫秒有效得多。”
梁永琪把这段话在脑子里转了一圈。
她从茶几边缘把脚收回来,侧过身面对着陈浩。
“分区域部署的话,跨区域的玩家就没办法在同一个服务器里玩了。
一个行会里如果既有华东的人又有华南的人,他们组队打副本的时候会分到不同的服务器里去。”
“那就把跨区域组队做成一个专门的功能。”陈浩说,“跨区域组队的时候系统自动把队伍分配到延迟最低的那个区域服务器上,其他区域的队员连过去的时候延迟会高一些,但至少能一起玩。
优先级是先保证同一区域的玩家体验,跨区域是次优解。”
第二天上午梁永琪把陈浩的方案转述给了李轩。
李轩听完之后坐在椅子上想了将近一分钟,然后点了一下头。
“分区域部署的话,我需要重新设计登录服务器的分配逻辑,还要加一套跨区域组队的路由系统。
三个月不一定够,但方向是对的。
物理距离的延迟确实不是靠算法能完全抹平的,把服务器推到玩家家门口是最直接的办法。”
他站起来走到机房的白板前面,拿起记号笔画了三个方框,分别写了“华东”“华南”“华北”三个词,在三个方框之间画了几条箭头,标注了“跨区域路由”。
画完之后他把记号笔放回凹槽里,转过身看着梁永琪。
“我先做区域部署的架构设计,算法优化那条线不放弃,两条线并行跑。
三个月之后看哪条线的效果更好,就用哪条线做主力方案。”
【跪求礼物,免费的为爱发电也行!】