1

node.js 客户端应用程序需要将文件夹与远程 node.js 服务器同步。两者都在 Windows 上运行。同步只需要单向,从服务器到客户端,并且知道何时完成的某种方式会很好。带宽不是关键考虑因素,如果有部分更改,则可以重新下载整个文件。就频率而言,例如 15 分钟的批量更新尝试就可以了。

什么方法或库更适合说,传递文件夹内容的 xml 表示并下载每个更改的文件?

谢谢

4

2 回答 2

2

我能想到的编写自己的单个文件目录的单向同步的最简单方法如下:

  1. 客户端收集它当前拥有的文件列表以及每个文件的一些识别版本信息(版本号、CRC、orig 文件创建时间-日期)。

  2. 客户端通过 ajax 请求将该列表发送到服务器。

  3. 服务器接收客户端文件列表并将其与自己的文件列表进行比较。然后它将三个文件列表返回给客户端:1) 通过下载最新版本来更新的文件,2) 客户端上要删除的文件,3) 供客户端下载的新文件。列表 1) 和 3) 可以在某些实现中合并,但有时了解哪些文件是新文件很有用。

  4. 客户端开始处理这些命令,下载新的/更改的文件并删除任何应该删除的文件。

  5. 当客户端完成下载后,它可以创建自己的进程完成通知。


这个过程有几个关键方面。首先,某种识别版本信息很重要。这里最简单的方案是服务器跟踪每个文件的单调递增版本号,以便每次在服务器上更改文件时,版本号都会增加。当文件传输到客户端时,客户端也知道版本号,并且版本号不能丢失。如果不方便存储单独的版本号,可以使用文件修改日期/时间,但客户端在更新自己的文件时必须非常小心,将修改日期/时间设置为准确的日期/时间应该是匹配服务器'

版本号也可以作为可识别的后缀存储在文件名中,例如 core-scripts-v11。在这种情况下,外部世界的实际文件名将是 core-scripts,但它会作为 core-scripts-v11 存储在存储库中以指示它是版本 11。如果此文件更改为新版本,则新版本将成为 core-scripts-v12。将此与客户端文件列表进行任何比较都需要分别比较核心名称和版本,而不仅仅是原始文件名。


如果您想要一个原子同步操作,其中始终传输一组一致的文件,并且您永远无法获得新批次文件的一部分和旧批次文件的一部分,那么必须完成更多工作。当文件在服务器上更新时,它们必须以原子方式更新,以便客户端与先前版本同步时不会中断。这很可能通过维护服务器存储库的多个版本来完成,以便与存储库的现有版本同步的客户端可以继续并完成与存储库的同步,并且更新文件的安装不会中断该操作。同样,有许多可能的方法来解决这个特定问题。

于 2015-03-14T00:20:54.280 回答
2

您正在为 Dropbox 寻找一个克隆,它将监视文件的更改等,所以我可以建议:

于 2015-03-13T00:54:02.313 回答