我有一个服务器应用程序,通过网络向许多客户端提供数据。您可以将数据想象成一个庞大的字符串列表。服务器上的数据可能会更改,需要在所有客户端上同步。
我目前正在使用这种方法:在初始连接时,客户端应用程序请求所有当前数据(可能是很多字节)。然后,它订阅任何数据的更新(添加,更改和删除)。
除非在发送初始数据列表和订阅更改的应用程序之间在服务器上更改数据,否则这样可以正常工作 - 在这种情况下,客户端会错过一些更新并在不知情的情况下处理过时的数据。
我认为这是一种非常常见的情况,因此应该有一种解决问题的模式。我正在使用C#4和WCF,但我认为该模式应该与语言无关。
答案 0 :(得分:2)
您是否看过Microsoft的Synchronization Framework .Net。它可以让您更好地控制同步的内容和方式。 WCF完全受支持。它支持增量更新并将更改同步回服务器。
API非常大,涵盖的不仅仅是数据库同步,但有很多文章。这应该让你开始:
答案 1 :(得分:0)
我没有这方面的经验,但是......
如果每个“初始连接”包含“时间戳”,并且在您订阅时,您订阅“自初始连接的时间戳”,那么服务器可以包括自该时间戳以来的所有更改,是吗?
关键是要包含客户端和服务器同意的一些服务器规范的时间概念。
e.g。而不是
void Connect()
Subscribe()
你有
Timestamp Connect()
Subscribe(timestamp)
答案 2 :(得分:0)
我只想添加另一条消息,在订阅请求后立即向客户端发送完整更新。
或者,客户端最初可以假定列表为空,并且服务器通过将客户端打包为多个增量“添加”消息来发送消息以重建客户端上的完整列表。
答案 3 :(得分:0)
也许Architecture Patterns for Data Synchronisation上的这篇文章会对您有所帮助。
听起来像基于事件的数据同步的设计模式接近你所需要的。