我找到了S.Lott关于我一直在寻找的一个很好的答案:
Client-server synchronization pattern / algorithm?
但我现在的问题是,如果客户有错误的时间怎么办?
这是我的问题:
假设客户端的时间比服务器晚1小时,那么客户端更改文件,因此最后写入时间现在比服务器晚1小时。当用户启动同步文件的程序时,服务器会对更改的文件说:“哦,那个文件比我的文件长1小时,所以让我们替换它”,但这是错误的,因为用户文件实际上是更新,所以应该上传到服务器。
我需要一个系统来检查服务器上或客户端上的文件是否较新,如果时间错误或不同,则不起作用。
有什么想法吗?
顺便说一下,我正在尝试编写一个云计划。
答案 0 :(得分:0)
如果您正在手动解决冲突(这对大多数应用程序都有意义),那么通过版本控制而不是时间戳可以更好地完成此操作。客户端修改文件时,请设置标志。同步时,请检查标志和版本。
如果设置了客户端标志且客户端和服务器版本相同,请将客户端文件发送到服务器。
如果未设置客户端标志且服务器版本较新,请将服务器文件发送给客户端。
如果设置了客户端标志且服务器版本较新,则发生冲突并应解决。
版本是每个文件,应与文件一起发送。
同步后重置所有客户端标志。
这个'标志'只是检查文件的最后修改时间是否与从服务器接收文件的时间不同(我们可以在从服务器获取文件后立即单独存储此时间)。 / p>
或者,您可以同步时间。
这是一个可能的解决方案:
从服务器接收文件时,首先从服务器获取当前时间,然后通过服务器和客户端时间之间的差异来偏移客户端收到的每个文件的时间戳。将文件发送到服务器时,您可以通过偏移客户端时间来执行类似操作。
但这似乎比必要的更复杂。