E6.14.3reconnect sync notice设计
恢复连接后应主动提示并同步离线期间的变更
别名: 恢复在线 · sync on reconnect · 重连提示
概念解释
网络回来不是默默把离线横幅撤掉就结束。离线期间本地可能改过东西,远端也可能改过东西。恢复连接后主动提示并同步,指界面要宣布「现在在线了」,把排队中的变更发出去(或拉下来),并把这一轮同步的结局说出来。用户在地铁里写的三条评论,出站后若没有任何下文,他们无法知道对面看见了没有。重连是一次事件,不是横幅的消失动画。
机制
离线把用户的世界模型和服务器的世界模型拆开。重连是合并。合并若不被宣布,用户仍按离线模型行动:不敢关应用、反复点发送、或以为已经同步而去告诉别人「我发过了」。主动提示把合并过程推到前景:开始同步、进行中、完成或冲突。它还要处理时间差——人可能在重连时正在做别的,提示不能抢走当前输入,但也不能静音到同步结束都没人知道发生过合并。沉默的成功在这里特别危险:离线队列发完和「其实没发出去」在表面上同为「横幅没了」。
边界
重连若每抖一次就提示一次,会变成噪音,应在稳定在线后再宣布一次,并把抖动窗口里的多次重连合成一轮同步。没有离线变更、也没有新的远端变更时,撤掉离线态即可,不必庆祝「又连上了」。冲突需要单独的对象级处理,不能用一句「已同步」盖过。后台同步进行时用户开始编辑同一对象,提示要让人知道这场同步尚未落在这个对象上,以免边写边被覆盖。
怎么落地
- 连接稳定恢复后宣布一次,并开始处理队列;用对象上的「同步中 / 已同步 / 冲突」接续,而不是只撤横幅。
- 同步结束给可扫的结局:发出 n 条、拉下 n 条、冲突 n 条;冲突可点进对象。
- 重连提示不要打断当前输入,用非模态槽,但必须出现。
- 验证:离线改两条,恢复网络后不要点任何同步按钮。若界面毫无下文,重连事件就被做成了横幅消失。