2014-04-11 199 views
0

,我发现美国洛特的什么,我一直在寻找一个很好的答案:客户端 - 服务器同步

Client-server synchronization pattern/algorithm?

但我的问题是现在,如果客户有一个错误的时间?

这里是我的问题:

比方说,客户的时间是在服务器后面1个小时,然后在客户端更改文件,所以现在的最后写入时间为1小时在服务器后面。当用户启动他的程序来同步文件时,服务器对改变后的文件说:“哦,那个文件比我的文件大1小时,所以让我们替换它”,但这是错误的,因为用户文件实际上是更新,所以它应该上传到服务器。

我需要一个系统来检查服务器上或客户端上的文件是否更新,如果时间不对或者不同,这种方式不起作用。

任何想法?

顺便说一下,我正在尝试编写一个云计算程序。

回答

0

如果您手动解决冲突(这对大多数应用程序来说是有意义的),那么使用版本控制而不是时间戳可能会更好。当客户端修改文件时,设置一个标志。同步时,请检查标志和版本。

  • 如果设置了客户端标志并且客户端和服务器版本相同,则将客户端文件发送到服务器。

  • 如果未设置客户端标志且服务器版本较新,请将服务器文件发送到客户端。

  • 如果设置了客户端标志且服务器版本较新,则会发生冲突并应予以解决。

版本是每个文件,应该与文件一起发送。

同步后重置所有客户端标志。


这“标志”可以只是检查该文件的最后修改时间是否从服务器接收到文件的时间不同(我们可以从获取文件后立即分开存放这段时间服务器)。


或者,您可以同步时间。

这里是一个可能的解决方案:

当从服务器接收文件,首先从服务器获取当前时间,则抵消了服务器和客户端的时间之间的区别在客户端上接收到的每个文件的时间戳。将文件发送到服务器时,可以通过按客户端时间偏移来做类似的操作。

但是,这似乎比必要的更复杂。

+0

感谢您的回答。但是,如果程序在用户更改某些内容时没有运行,那么不能设置标志 – schacker22

+0

“标志”可以仅仅是检查文件的最后修改时间是否与从文件接收到文件的时间不同服务器 - 这不会要求程序不断运行。 – Dukeling