2013-03-30 66 views
0

我正在为需要支持离线数据访问的多客户端应用程序实施基本同步策略。我在回答this question时使用@Chris的建议(不需要阅读)。同步实现中的时间戳

我想添加的一个细节是根据上次保存的更改解决冲突的能力,而不是上次更改同步。换句话说,如果两个客户端更新同一个项目,最后保存更改的客户端应该会赢,即使其他客户端晚点同步。

很明显,我需要一些方法来为客户端上的每个更改添加时间戳,以便我可以在同步时比较服务器上的邮票。但是,我无法保证每个客户的内部时钟。

我想知道是否有一个既定的方法来解决这个问题?越简单越好!

回答

1

如果您询问客户端时钟劫持:客户端应该根据从服务器获取的时间戳和本地时钟获得的时间间隔来维护它自己的内部时钟。

所以,你只需要更新“的客户端时间戳”相对服务器:

  • 客户记录有CT1更新时间;
  • 在CT2时刻连接服务器后,您会发现服务器时间为ST2;
  • 因此记录更新时间更改为ST1 = ST2 - CT2 + CT1。

另一种方式是在服务器端维护相同的转换。 (这可能更加正确和安全)。

对不起 - 只是一个音符 - 奇怪的是你称之为'冲突解决',当它更'最后更新胜利',并没有实际的解决方案执行。

+0

感谢您的术语说明。 –

+0

这是有问题的,如果本地机器上的时间错误怎么办?另外,如果错误的时间在两者之间发生了什么变化呢?我的用户中有5%在他们的机器上有错误的时间,这可能看起来像一个小数字,但有一个庞大的基础,它可以成千上万的用户。 –

2

我不会乐意尝试基于时间戳做到这一点,我认为您需要查看适当的版本解决方案。我不知道你在用什么语言,但我有一个完整的库。即使图书馆不感兴趣,您可能会发现它的文档对于构建您自己的解决方案非常有用...它可以完全解释为...

该项目位于GitHub

+0

如果本地文件和服务器上的时间不对,会发生什么问题 –

+1

好问题...服务器在您的控制之下,因此应该是正确的或者至少一致地递增... 实际上,它由唯一ID发电机是可订购的...实际上它是: 1)我已经按此顺序编写了这些更改。 2)我按顺序从服务器进行这些更改。 3)我可以使用此算法合并这些更改(可由应用程序的开发人员覆盖)。 – Forbesmyester