网络延迟会让参与者对同一物体状态的感知短暂不一致
别名: 状态不同步 · 短时不一致 · eventual consistency · 延迟分叉
概念解释
你看见盖子已经盖上,对方还在往开启的口里放零件——不是谁眼花,是那次状态更新还在路上。一致性延迟(consistency delay)让参与者在几百毫秒里各自握着同一物体的不同版本。窗口一过会对上,但窗口里做出的动作(继续放、已经松手、开始下一步)会按错误版本提交。
这是物体状态的短暂分叉,不是「他站在哪」没对齐。人的位置同步是另一条链路。
机制
权威状态在一台主机或一份复制协议里。本地为了手感会立刻模拟自己的操作(乐观更新),别人的操作要等报文。于是出现两种画面:自己这边盖子已合,对方那边口还开着。物理协作里光和声几乎同时到达所有眼睛;网络把「同一时刻」拆开了。人用眼前的版本做决策,决策一旦发出,对账到来时就变成一次冲突或一次莫名其妙的跳变。
航位推算、插值、状态和解可以让分叉看起来平滑,但平滑不是一致:对方仍可能在你已关闭的口里放东西。若界面把平滑动画当成「已经双方同意的状态」,人会在和解完成前启动下一步。
怎么研究
用受控延迟的共同操作:在实验室注入 50–300 ms 的单向延迟和抖动,让两人轮流或同时改同一物体的开合、颜色、位置。记录双方报告的「当前状态」是否一致,以及基于过时状态发出的错误操作。
网络因子:平均延迟、抖动、丢包、是否乐观更新。 行为指标:状态不一致持续时长、过时操作次数、跳变引发的撤销、主观「他是不是没看见」。
无线局域网的「感觉挺快」不够。要把延迟当作自变量拨到 overt 的档,才能看见分叉。
边界
同室、走本地短距同步且延迟低于动作时间常数时,分叉短到决策插不进去,可以不做显式提示。对延迟不敏感的状态(房间灯开关、很少改的标签)短暂不一致代价低。权威在云端、跨城协作时,分叉是常态,不能靠「网再快点」消除。物体状态一致解决不了指向偏差:两人坐标没对齐时,即使盖子开合双方一致,指「那个口」仍会指错。仲裁规则处理的是冲突如何收场,不消除分叉本身——两者要叠用。
怎么落地
- 对会触发下一步的状态(开/关、锁定、装入),在未确认对端已收到前不要把它画成最终态;用「正在同步」或双端都未确认的中间外观。
- 乐观更新只用于连续拖动的中间帧;提交点(放下、拧紧、删除)等权威回执。
- 和解时若会跳变,给一个可感知的过渡,并允许撤销那次基于过时画面的操作。
- 验证:注入约 200 ms 延迟,让 A 盖上盖子、B 在同一秒往口里放零件。B 的零件不应在无提示的情况下消失或穿模;应看到状态尚未对齐。两边都以为自己成功、对账后物体乱套,分叉就被当成了真相。