了解 Neil Fraser 的差分同步算法

Understanding Neil Fraser's Differential Synchronization algorithm

我正在尝试完全理解 Differential Synchronization algorithm,尤其是 保证交付方法(第 4 节)。

我不明白为什么在同步周期的上半部分需要一个编辑堆栈

编辑堆栈的用途如下(从第 4 节的第二段复制):

[...] in the case of packet loss, the edits are queued up in a stack and are retransmitted to the remote party on every sync until the remote party returns an acknowledgment of receipt.

有道理。但是在第六段的后面(丢失return数据包的情况)它说:

This indicates that the previous response must have been lost. Therefore the server deletes its edit stack and copies the Backup Shadow into Shadow Text (step 4).

所以,据我了解:

如果这是正确的,那么上半部分的编辑堆栈将是空的或包含一个条目。此外,在任何情况下,该单一条目都不会(重新)发送回客户。让它完全没用?!

那么显而易见的问题是 为什么我们根本需要 编辑堆栈(在上半部分)?

我确信我遗漏了一些重要的东西。请帮帮我。

您的观点适用于 客户端-服务器 架构。服务器的 Edits 堆栈是更通用的对称表示的保留,其中客户端和服务器具有相同的功能和结构(特别是,任何一方都可以发起通信)。虽然客户端的 Backup Shadow 最好在客户端-服务器设置中删除以节省 space/time,但 Edits 仍然可以使用堆栈数据结构而没有任何缺点,并且具有一致的好处API。请注意,该算法大约可追溯到 2009 年。今天(2017 年),您可能会选择使用 WebSockets 或 WebRTC。差分同步算法预期并适应这样一种设置,其中双方本质上是 对等方 并遵循相同的协议。