分布时间同步的基本概念
阅读该部之前,你必须透彻了解 VRChat Avatar 的本地与远端相关的知识,的本地与远端是如何运行的,否则你将难以理解该部内容。
直接同步
现在,假设我们有4个整数需要和远端玩家同步:
- int_A
- int_B
- int_C
- int_D
如果将他们设置为同步,那么,数值将会通过网络直接抵达远端玩家的客户端。
直接同步 Parameter 的视觉展示
分布时间同步
而分布时间同步的概念与直接同步非常相似,但是传输信息的方式有所改变。我们知道,同步参数的消耗只有在一个参数被标记为Synced (同步) 时才会生效。换句话说,如果一个参数没有被标记为 Sync,那么,这个参数不会消耗同步Bit。
那么,是否有一种办法,可以将不同的参数传递到远端玩家,但是不需要全部参数都是同步的?
分布时间同步架构
依然,假设我们有4个整数需要和远端玩家同步,将我方称之为源头,接收方称之为终点:
- int_A
- int_B
- int_C
- int_D
我们知道,当一个参数被标记为同步,它会通过网络发送到远端。那么,我们可以利用这一点,只需要1个同步参数在中间充当桥梁即可,而每一次同步时,替换同步的源头和终点。
分布时间同步架构的视觉展示
如果你认为这样来理解还是太抽象的话,就将同步容器想象成一个背包。当背着背包去上学的时候,背包里面就放满了课本和文具;当背着背包去登山的时候,背包里面就放满了三明治,水,驱蚊水;当背着背包去旅行,背包里面就放满了地图,指南针,换洗衣物...
分布时间同步架构同步 Int_B 时
由此,将同时同步4个整数拆分为分4次同步4个整数。这样,同一时间只需要同步容器是同步的,每一次将不同的参数放入同步容器,一头放入,一头取出,就完成了通过1个同步容器进行4个整数的同步。