2015-04-07 55 views
3

我試圖完全理解Differential Synchronization algorithm,特別是保證交付方法(第4節)。瞭解Neil Fraser的差分同步算法

synchronization cycle

我不明白爲什麼有必要在同步週期的上半編輯堆棧

編輯的目的堆疊如下(從第二段在部分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.

有道理。但後來在第六段(在丟失返回的數據包情況下),它說:

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).

所以,就我的理解:

  • 在正常的操作:編輯堆棧 (在上半部分)將包含單個條目,該條目在下一個同步週期期間被確認並移除。

  • 如果發生網絡錯誤:客戶端無法確認編輯棧,然後服務器將簡單地清除它。

如果這是正確的,那麼在上半部分的編輯堆棧要麼是空或包含一個條目。此外,在任何情況下,單一條目都不會(重新)發送給客戶。使它完全無用?!

顯而易見的問題是爲什麼我們需要編輯棧(在上半部分)呢?

我確定我錯過了一些重要的東西。請幫助我。

回答

1

您的觀點適用於客戶端服務器架構。服務器的Edits堆棧是更通用的對稱表示,其中客戶端和服務器具有相同的功能和結構(特別是任何一方都可以啓動通信)。雖然客戶端的Backup Shadow理想情況下會放在客戶端 - 服務器設置中以節省空間/時間,但Edits仍然可以使用堆棧數據結構,而不會有任何負面影響,並且可以獲得一致的API。請注意,該算法的日期從2009年左右開始。今天(2017年),您可以選擇使用WebSockets或WebRTC。差分同步算法預計和適應這樣的設置,其中雙方本質上是對等體並遵循相同的協議。