2011-07-26 59 views
2

用於同步客戶端和服務器之間的文本文件的低延遲,低帶寬算法是什麼?用於在客戶端/服務器之間同步文本的算法

是否有一種設計,客戶端發送當前狀態的增量並且它是服務器的最後ACK'd狀態?我想到的Quake3網絡..

編輯1:

更具體地說,如何將一個差異/增量算法的行爲在客戶機/服務器環境。

例如在客戶端計算diff比較昂貴,發送到服務器,服務器是否解釋並更新其存儲,向客戶端發送ACK?或者,在客戶端發送完整狀態並將服務器存儲到其中的情況下擁有複製模型會更便宜。編輯2:

100 KB文本文件。小東西,不是太大。

回答

1

對於文本你可以使用增量算法,看看,例如,rsync如何工作。

谷歌使用不同的方法來更新Chrome,你可以「谷歌」它看到。

編輯:如果這是一個服務器生成一個更改並在大量客戶端複製,它應該在服務器中完成。從問題的變化中,我瞭解客戶(或許多客戶)會產生變化,並希望他們在服務器上被複制。

嗯......我會採取帳戶4件事:

  • 網絡性能
  • 數量的客戶端
  • 數量變化的預期服務器的
  • 性能的客戶

太多的客戶端發送和這樣做的服務器:它幾乎是一個拒絕服務 我只做到這一點在服務器上,如果客戶端少,服務器性能高,客戶端性能低。否則,我只會在客戶端上這樣做。

+0

在客戶端/服務器環境中是否有效? – brooksbp

+0

@brooksbp編輯answe – woliveirajr

2

你的意思是像一個diff

在客戶端存儲服務器端的文件版本。無論何時需要同步,運行diff(您可以自己編寫或使用庫)。然後發送差異到服務器,並有服務器patch它是本地版本。

+0

我猜diff/delta算法是其中的一部分。我更新了原始問題,詳細說明了我想要問的問題 – brooksbp

1

如果客戶端也編輯了文本,並且具有撤銷/重做功能,則可以使用撤消堆棧進行增量。對於大文本和使用撤消堆棧的小改動應該比運行diff更高效。

相關問題