登录同一个账号后,你在一台 Mac 上复制的内容通常很快就会出现在其它设备上。这篇文章用平实的语言讲清楚这背后发生了什么,方便你在遇到疑问时判断是正常现象还是需要排查。

增量同步与游标

PasteLayer 不会每次都把你全部的历史记录重新传一遍,而是只同步「上次同步之后新增或改动的部分」,这叫增量同步。

每台设备都记着一个游标(cursor),可以理解成一个书签,标记它已经拿到了哪个位置的更新。同步时,设备带着自己的游标去问服务器:「从这个位置之后还有什么新东西?」服务器只把之后的变化返回给它,然后设备把游标往前推。

这样做的好处是:

  • 传输的数据量很小,日常同步通常在一瞬间完成。
  • 断网又恢复后,设备只需要补上缺的那一段,不用从头再来。
  • 每台设备各自维护游标,进度互不影响。

冲突是怎么解决的

如果同一条内容在两台设备上都被改过,就会产生冲突。PasteLayer 采用「后写覆盖」(Last-Write-Wins,简称 LWW)的规则:每次改动都带一个时间戳,冲突时保留时间戳更新的那一版。

这里有一个对你有利的细节:本地还没同步出去的改动会被优先保留。也就是说,你在当前设备上刚做的、尚未上传的修改不会被服务器上较旧的版本悄悄盖掉,直到它成功同步出去为止。绝大多数日常场景下,你几乎感受不到冲突的存在。

什么时候会触发同步

同步不是固定每隔几秒跑一次,而是在下面这些时机被触发,尽量做到「该更新的时候就更新」:

  1. 登录账号后。
  2. 把 PasteLayer 切到前台使用时。
  3. 检测到系统剪贴板有新内容时。
  4. 网络从断开恢复到可用时。
  5. 后台定时轮询到点时。
  6. 你手动点击同步时。
  7. 设备从睡眠中唤醒时。
  8. 你改动了同步相关设置时。

多个时机可能在短时间内接连发生,客户端会做合并,避免重复地做无意义的同步。

图片走的是独立通道

文字内容通常很小,可以随增量同步一起传输。图片则不同,它体积更大、耗时更长,所以走一条独立的通道,和文字同步分开进行,互不拖累。

每张图片在传输过程中有自己的状态(blob 状态机),上传和下载是两个分离的阶段:

  • 一台设备先把图片上传,标记为已就绪。
  • 其它设备在需要时再去把它下载下来。

这种「先占位、按需拉取」的设计意味着:文字条目往往会先到,对应的图片可能稍晚一点才在另一台设备上显示完整。看到图片短暂显示为加载中,通常就是它还在独立通道里传输,稍等即可。