线上抢答里最常听到的抱怨就是这句:"我明明先按的,为什么算他赢?"很多人第一反应是怪手机卡,其实多半是网络延迟的问题,也就是常说的RTT(Round-Trip Time,往返延迟)。

先想见面玩的情形。几个人围着桌子拍桌面抢答,声音传进耳朵几乎不花时间,裁判听声辨先后,基本不会冤枉人。到了网上,这个前提就没了。比如A玩家连的是Wi-Fi,网络延迟10ms;B玩家用的是5G,延迟100ms。两人几乎同时按下抢答键,信号各自往服务器跑,A的先到,B的还在路上,服务器自然判A赢。可从B的视角看,自己明明不比A慢,这就是一桩物理层面的冤案。

补偿前时序图:两人同时按下,A的包因延迟低先到服务器,B被判在后面

图1 · 同时按下,名次却按到达顺序排

怎么办?靠时间同步加延迟补偿,思路类似NTP协议。游戏开始前,服务器先给每台设备发探测包,量出每个人的RTT,再算出各人的本地时钟跟服务器差多少。正式抢答的时候,系统比的就不是"谁的数据包先到服务器",而是每个数据包里带的、经过补偿修正的本地时间戳。你延迟高,系统就把数据包在路上花掉的时间补回去。

NTP式补偿流程:赛前用探测包量出RTT和时钟差,抢答时按补偿后的本地时间戳排位

图2 · 先量延迟,再按时间戳排位

这么一抹平,网络好坏就不再是胜负手,大家比的又回到了纯粹的反应速度。所以下次再碰到"先按却输了",先别急着摔手机,看看是不是网络在背后动了手脚。

方核·抢答器