2010-07-07 50 views
5

我有一個服務器應用程序,通過網絡向多個客戶端提供數據。你可以將數據想象成一個巨大的字符串列表。服務器上的數據可能會更改,並且需要在所有客戶端上同步。是否有通過網絡同步數據列表的模式?

我目前正在使用這種方法:在初始連接時,客戶端應用程序請求所有當前數據(可能是很多字節)。然後,它訂閱任何數據的更新(添加,更改和刪除)。

這工作正常,除非數據在發送初始數據列表和應用訂閱更改的服務器之間發生更改 - 在這種情況下,客戶端會丟失一些更新並在不知道它的情況下處理過期的數據。

我相信這是一個非常常見的情況,所以應該有一個模式來解決這個問題。我使用C#4和WCF,但該模式應該是語言不可知的,我相信。

回答

0

我沒有經驗做這個,但是......

如果每個「初始連接」包含一個「時間戳」,當你訂閱,你訂閱「因爲初始連接的時間戳」,那麼服務器可以包括所有自那個時間戳以來的變化,是嗎?

關鍵是要包含客戶端和服務器都同意的一些服務器規範的時間概念。

例如而不是

void Connect() 
Subscribe() 

你有

Timestamp Connect() 
Subscribe(timestamp) 
0

我只想補充一點,訂閱請求後立即發送一個完全更新到客戶端的另一個消息。

或者,客戶端最初可以假定列表爲空,並且服務器通過將消息打包成多個增量「添加」消息來發出消息來重建客戶端上的完整列表。