Algorithm 客户端-服务器同步

Algorithm 客户端-服务器同步,algorithm,time,synchronization,Algorithm,Time,Synchronization,我找到了S.Lott关于我一直在寻找的东西的一个很好的答案: 但我现在的问题是,如果客户的时间不对怎么办 我的问题是: 假设客户端的时间比服务器晚1小时,然后客户端更改一个文件,所以最后一次写入时间现在比服务器晚1小时。当用户启动同步文件的程序时,服务器会对更改的文件说:“哦,你那里的文件比我的文件早1个小时,所以让我们替换它”,但这是错误的,因为用户文件实际上较新,所以应该上载到服务器 我需要一个系统来检查文件是在服务器上更新还是在客户机上更新,如果时间错误或不同,该系统将无法工作 有什么想

我找到了S.Lott关于我一直在寻找的东西的一个很好的答案:

但我现在的问题是,如果客户的时间不对怎么办

我的问题是:

假设客户端的时间比服务器晚1小时,然后客户端更改一个文件,所以最后一次写入时间现在比服务器晚1小时。当用户启动同步文件的程序时,服务器会对更改的文件说:“哦,你那里的文件比我的文件早1个小时,所以让我们替换它”,但这是错误的,因为用户文件实际上较新,所以应该上载到服务器

我需要一个系统来检查文件是在服务器上更新还是在客户机上更新,如果时间错误或不同,该系统将无法工作

有什么想法吗


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

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

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

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

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

版本为每个文件,应随文件一起发送

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


此“标志”仅用于检查文件的上次修改时间是否与从服务器接收文件的时间不同(我们可以在从服务器获取文件后立即单独存储此时间)


或者,您可以同步时间

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

当从服务器接收文件时,首先从服务器获取当前时间,然后通过服务器和客户端时间之间的差异偏移客户端接收到的每个文件的时间戳。将文件发送到服务器时,您可以通过按客户端时间进行补偿来执行类似的操作


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

谢谢你的回答。但是如果在用户更改某些内容时程序没有运行,该怎么办,无法设置任何标志“标志”仅用于检查文件上的上次修改时间是否与从服务器接收文件的时间不同-这样就不需要程序持续运行。