Delphi-网络上的文件夹同步
我有一个连接到数据库的应用程序,可以在多用户模式下使用,多台计算机可以连接同一个数据库服务器来查看和修改数据。其中一个客户始终被指定为“主”客户。此主机还接收来自RS232或UDP输入的文本信息,并每秒将此数据记录到本地计算机上的文本文件中 我的问题是其他客户端需要从主客户端访问此数据。我只是想知道解决这个问题的最佳和最有效的方法。我正在考虑两种选择:Delphi-网络上的文件夹同步,delphi,networking,synchronization,file-copying,Delphi,Networking,Synchronization,File Copying,我有一个连接到数据库的应用程序,可以在多用户模式下使用,多台计算机可以连接同一个数据库服务器来查看和修改数据。其中一个客户始终被指定为“主”客户。此主机还接收来自RS232或UDP输入的文本信息,并每秒将此数据记录到本地计算机上的文本文件中 我的问题是其他客户端需要从主客户端访问此数据。我只是想知道解决这个问题的最佳和最有效的方法。我正在考虑两种选择: 编写文件夹同步类以将远程(主)计算机上的文件夹与本地(客户端)计算机上的文件夹同步。这将是一个线程化的缓冲文件复制例程 实现客户机/服务器,以便
使用哪种方法更好?利/弊是什么?我也看到了我正在考虑使用的帖子 编写一个web服务接口,以便客户端可以连接到服务器并根据需要提取新数据。或者,您可以将其编写为订阅/推送机制,以便客户端连接到服务器“订阅”,然后服务器将所有新内容推送到已注册的客户端。客户端在注册时需要完全同步(获取自上次同步以来的所有更改),以防更新发生时处于脱机状态。这两种解决方案在LAN上都可以正常工作,由您选择。您可能还想考虑与您选择的技术相关的问题:
- 部署灵活性。使用文件共享和文件复制需要文件共享才能工作,所有LAN用户都可以访问日志文件
- 长期计划:文件共享仅适用于本地网络,而基于IP的解决方案适用于路由网络,包括Internet
- 与IP解决方案相比,基于文件的解决方案更易于实现
要复制打开的文件,您需要设置Windows卷影复制服务。关于如何设置主机以允许使用Windows卷影复制复制打开的文件的非常详细的说明。如果将这些文本文件存储在数据库中,与存储要求相比,这些文本文件中的“有用”数据量微不足道。我考虑过这一点,但出于许多原因,决定不存储所有数据。为了在数据库服务器上节省廉价的磁盘空间,您需要花时间实施一个复杂的基于文件的同步解决方案,将非常相同的数据复制n次,而不是将它们存储到数据库中一次,这将很好地解决并发访问问题?是的,我知道,然而,发生这种情况还有其他原因。我只需要大约0.001%的数据,数据库服务器上的备份时间至关重要。在这种情况下,“廉价磁盘空间”实际上并不便宜,因为由于现场缺乏廉价的互联网接入,数据库数据需要保持在最低限度——数据需要通过昂贵的卫星通信在极其偏远的位置发送。这是一个很好的观点,谢谢。我不知道你在使用什么数据库,但是如果数据库备份非常重要,你可以使用两个单独的数据库(或模式),一个用于数据,一个用于日志,这样你就可以单独备份它们了。需要通过sat通信发送哪些数据?数据库是远程的吗?如果是这样,请在本地LAN中使用另一个DB(上面的d段)并将其用于日志。+1因为事实上,数据库解决方案确实是最容易实现的,而且它也是“可移植的”(通过TCP/IP工作,您可以从任何地方访问它)。任何开源(即:无许可费用)db都可以,存储开销将是最小的。+1感谢额外的问题。由于这个软件只会在局域网上使用(因为它总是在一个没有互联网的远程位置),我不必担心这一点。我在想,对于rsync来说,基于文件的也会更容易+1。上次我需要它时,我花了很长时间在delphi中开发一个解决方案。然后我放弃安装RSYNC,改用它,再也不回头了。这是一个unix/linux实用程序,但它在windows中工作得很好,而且已经构建了一个windows安装程序/服务;这是一个Linux工具,在Windows上还没有找到一个好的家。Windows端口(使用cygwin)有bug,有时由于未知原因无法工作。99%的时间它都能按预期工作,我使用它是因为99%对我来说已经足够好了,但是如果需要100%的可靠性,那就不是最好的选择@Simon,
rsync
,使用它的Linux根,可以轻松地与