Skip to main content

分布时间同步的基本概念

 

阅读该部之前,你必须透彻了解 VRChat Avatar 的本地与远端相关的知识,否则你将难以理解该部内容。

 

直接同步


现在,假设我们有4个整数需要和远端玩家同步:

  • int_A
  • int_B
  • int_C
  • int_D

如果将他们设置为同步,那么,数值将会通过网络直接抵达远端玩家的客户端。

sync direct.png

直接同步 Parameter 的视觉展示

分布时间同步


分布时间同步的概念与直接同步非常相似,但是传输信息的方式有所改变。我们知道,同步参数的消耗只有在一个参数被标记为Synced (同步) 时才会生效。换句话说,如果一个参数没有被标记为 Sync,那么,这个参数不会消耗同步Bit。

那么,是否有一种办法,可以将不同的参数传递到远端玩家,但是不需要全部参数都是同步的?


分布时间同步架构

依然,假设我们有4个整数需要和远端玩家同步,将我方称之为源头,接收方称之为终点:

  • int_A
  • int_B
  • int_C
  • int_D

我们知道,当一个参数被标记为同步,它会通过网络发送到远端。那么,我们可以利用这一点,只需要1个同步参数在中间充当桥梁即可,而每一次同步时,替换同步的源头和终点。

image.png

分布时间同步架构的视觉展示

如果你认为这样来理解还是太抽象的话,就将同步容器想象成一个背包当背着背包去上学的时候,背包里面就放满了课本和文具当背着背包去登山的时候,背包里面就放满了三明治,水,驱蚊水当背着背包去旅行,背包里面就放满了地图,指南针,换洗衣物...

image.png

分布时间同步架构同步 Int_B 时

由此,将同时同步4个整数拆分为分4次同步4个整数。这样,同一时间只需要同步容器是同步的,每一次将不同的参数放入同步容器,一头放入,一头取出,就完成了通过1个同步容器进行4个整数的同步。