第2373章 网络同步与“提前量”的战争 (第2/2页)
器→客户端广播”。
他在两条箭头的中间画了一个方框,方框里写了四个字:“预判+校验”。
“告诉李轩,用‘客户端预判+服务器校验’的模式。
客户端先让玩家看到命中的特效,子弹打出去的那一瞬间屏幕上就弹反馈,不等服务器确认。
然后服务器在后台做最终裁定,如果服务器判定命中,那就没事;如果服务器判定没命中,客户端再把这个反馈撤回来,但误差窗口控制在几十毫秒以内,玩家感觉不出来。”
梁永琪把这段话记在手机备忘录里,第二天上午转述给李轩的时候,李轩听完之后沉默了很久。
他坐在椅子上,两只手交叉着搁在腹部,视线落在天花板上,嘴唇动了动像在默算什么东西。
“浩哥这个思路是行业顶级的。”他终于开口了,声音比刚才低了一些,“客户端先反馈,服务器后校验,把玩家的感知延迟压到最低,实际的数据一致性用服务器兜底。
但这个‘假命中’需要极其精细的补偿算法,客户端预判的时机和服务器校验的窗口要卡得非常准。
如果客户端的预判和服务器校验的结果差得太多,就会出现一种最恶心的BUg——玩家明明看到自己打中了,屏幕上弹了命中特效,敌人身上也飙了血,但两秒钟之后服务器说‘没打中’,那个敌人又满血站起来了。
玩家会骂死我们。”
“那就把补偿算法做到不差太多。”梁永琪说。
技术团队在接下来的三周里几乎住在了机房。
李轩带着两个网络方向的程序员把客户端预判模块和服务器校验模块拆开重写了一遍,在两者之间加了一层补偿缓冲区,缓冲区的窗口大小根据实时网络延迟动态调整。
第一版延迟补偿算法跑通的那天晚上,李轩在模拟环境里把网络延迟设到了200毫秒,开枪打一个移动目标,屏幕上弹出了命中反馈,服务器校验的结果在缓冲区窗口内追了上来,确认了命中。
【跪求礼物,免费的为爱发电也行!】