【问题标题】:Sync clients' files with server - Electron/node.js将客户端的文件与服务器同步 - Electron/node.js
【发布时间】:2019-03-09 19:57:36
【问题描述】:

我的目标是制作一个 Electron 应用程序,它将客户端的文件夹与服务器同步。为了更清楚地解释它:

  1. 如果客户端在主机服务器上没有文件,应用程序会将所有文件从服务器下载到客户端。
  2. 如果客户端有文件,但服务器上的某些文件已更新,则应用程序仅删除过时的文件(保留未修改的文件)并下载更新的文件。
  3. 如果文件已从主机服务器中删除,但存在于客户端的文件夹中,则应用程序会删除该文件。

简单地说,应用程序必须确保客户端拥有主机服务器文件夹的准确副本。

到目前为止,我是通过 wget -m 执行此操作的,但是 wget 经常无法识别某些文件已更改并给客户端留下过时的文件。

最近我听说了 zsync-windows 和 webtorrent npm 包,但我不确定哪种方法是正确的,以及如何真正实现我的目标。感谢您的帮助。

【问题讨论】:

    标签: npm synchronization electron webtorrent zsync


    【解决方案1】:

    rsync 是一个不错的方法,但您需要通过 node.js 访问它

    像这样的 npm 包可以帮助你: https://github.com/mattijs/node-rsync

    但是在 Windows 系统上事情会变得稍微困难​​一些: How to get rsync command on windows?

    【讨论】:

      【解决方案2】:

      如果您可以通过 ssh 访问服务器,则可以通过 Node.js 包使用rsync

      有一篇很好的文章 here 介绍了如何实现这一点。

      【讨论】:

        【解决方案3】:

        您可以使用rsync,它广泛用于备份和镜像,并作为日常使用的改进复制命令。它提供了大量选项来控制其行为的各个方面,并允许非常灵活地指定要复制的文件集。

        它以其增量传输算法而闻名,该算法通过仅发送源文件与目标中现有文件之间的差异来减少通过网络发送的数据量。

        对于您的用例:

        1. 如果客户端在主机服务器上没有文件,应用程序会将所有文件从服务器下载到客户端。这可以通过简单的 rsync 来实现。
        2. 如果客户端有文件,但服务器上的某些文件已更新,则应用程序仅删除过时的文件(保留未修改的文件)并下载更新的文件。使用:–remove-source-files-delete,具体取决于您是要从源还是目标中删除过时的文件。

        3. 如果文件已从主机服务器中删除但存在于客户端的文件夹中,则应用程序会删除该文件。使用:rsync的-delete选项。

          rsync -a --delete 源目标

        【讨论】:

          【解决方案4】:

          鉴于它是一个文件夹列表(因此具有没有空格的简单文件名等),您可以使用以下代码选择文件名

          # Get last item from each line of FILELIST
          awk '{print $NF}' FILELIST | sort >weblist
          
          # Generate a list of your files
          find -type f -print | sort >mylist
          
          # Compare results
          comm -23 mylist weblist >diffs
          
          # Remove old files
          xargs -r echo rm -fv <diffs
          

          您需要删除最后的 echo 以允许 rm 工作

          下次您想更新您的镜像时,您可以修改 comm 行(通过交换两个文件参数)以找到您没有的文件集,并将这些文件提供给 wget

          rsync -av --delete https://mirror.abcd.org/xyz/xyz-folder/ my-client-xyz-directory/
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-05-25
            • 1970-01-01
            • 1970-01-01
            • 2012-04-21
            • 1970-01-01
            • 1970-01-01
            • 2021-11-18
            • 1970-01-01
            相关资源
            最近更新 更多