Delphi - 网络上的文件夹同步

时间:2011-07-05 12:50:58

标签: delphi networking synchronization file-copying

我有一个连接到数据库的应用程序,可以在多用户模式下使用,因此多台计算机可以连接同一个数据库服务器来查看和修改数据。其中一个客户总是被指定为“主”客户。该主站还从RS232或UDP输入接收文本信息,并每秒将此数据记录到本地计算机上的文本文件中。

我的问题是其他客户端需要从主客户端访问此数据。我只是想知道最好和最有效的方法来解决这个问题。我正在考虑两种选择:

  1. 编写文件夹同步类,以将远程(主)计算机上的文件夹与本地(客户端)计算机上的文件夹同步。这将是一个线程化的缓冲文件复制例程。
  2. 实施客户端/服务器,以便主计算机可以将此数据提供给连接和请求数据的任何客户端。主服务器将通过TCP / UDP将文件发送给请求客户端。
  3. 解决方案必须考虑以下因素:

    一个。每秒都会写入日志文件。它必须避免任何潜在的文件锁定问题。

    湾复制例程应该只复制在比客户端计算机上已有的日期更新的文件。

    ℃。尽可能高效

    d。所有机器都在局域网上

    即只需每10分钟左右执行一次同步。

    F。数据量仅为~50MB,但是一旦初始(第一次)同步完成,那么要传输的数据量将仅为~1MB。这将在未来增加

    哪种方法更好?有哪些优点/缺点?我还看到了我正在考虑使用的Fast File Copy帖子。

4 个答案:

答案 0 :(得分:6)

如果您使用数据库,为什么“master”会将数据写入文本文件而不是数据库,如果需要共享这些数据?

答案 1 :(得分:3)

为什么要发明轮子?请改用rsync。 Windows打包:cwrsync

例如,在主机上安装rsync服务器,并在客户端计算机上安装rsync客户端或只是删除项目目录中的文件。只要需要,客户端计算机上的应用程序应execute rsync.exe请求从服务器同步必要的文件。

要复制打开的文件,您需要设置Windows卷影复制服务。 Here's关于如何设置主机以允许使用Windows卷影复制来复制打开文件的详细说明。

答案 2 :(得分:2)

编写Web服务接口,以便客户端连接到服务器并根据需要提取新数据。或者,您可以将其编写为订阅/推送机制,以便客户端连接到服务器,“订阅”,然后服务器将所有新内容推送到已注册的客户端。客户端在注册时需要完全同步(获取自上次同步后的所有更改),以防更新发生时它们处于脱机状态。

答案 3 :(得分:1)

两种解决方案都可以在局域网上正常运行,选择权在您手中。您可能还想考虑与您选择的技术相关的问题:

  • 部署灵活性。使用文件共享和文件复制需要文件共享才能工作,并且所有LAN用户都可以访问日志文件。
  • 长期计划:文件共享仅适用于本地网络,而基于IP的解决方案适用于路由网络,包括Internet。
  • 与IP解决方案相比,基于文件的解决方案将更容易实施。