【问题标题】:Local/remote access synchronization for an ftp siteFTP站点的本地/远程访问同步
【发布时间】:2010-12-01 20:07:01
【问题描述】:

我正在编写一些代码来通过从 ftp 站点获取新 dll 来更新应用程序,根据清单文件,也在 ftp 站点上,它指定了每个 dll 的版本。基本思想是,更新程序在启动时运行,它检查 ftp 站点上的清单,下载比应用程序当前使用的 dll 更新的任何 dll,然后启动应用程序并自行关闭。

这会导致以下问题,我不确定最好的处理方法:假设我想在 ftp 站点上放置一个新的 dll,但同时更新程序应用程序实例尝试读取该 dll .如果我删除 dll,然后复制新的,更新程序可能看不到该文件,即使清单表明它应该在那里。

我有一种标记文件的想法,它将充当同步对象,我和更新程序实例可以将其存在用作锁,但这不仅仅是移动问题吗?在检查锁是否存在和制作锁(其他人可以制作锁)和开始修改 ftp 文件之间仍有时间。另外,如果某些更新程序在删除标记之前崩溃,则无法判断是否应该删除剩余的标记。

编辑:我还看到了将文件上传到另一个文件夹,然后重命名文件夹的建议,因为重命名应该是 ftp 中的原子操作,但是否可以只将文件夹重命名为现有文件夹?不应该先删除已有的文件夹,造成同样的问题吗?

有解决这个问题的标准方法吗?

【问题讨论】:

    标签: ftp synchronization locking


    【解决方案1】:

    怎么样:在 FTP 服务器上,在文件名中包含版本信息。在客户端,下载后重命名文件。

    【讨论】:

    • 谢谢。我认为它可以工作。由于清单指定了要使用的 dll 版本,因此同时启动两个 dll 版本并没有什么坏处。上传新的 dll 后,我将新清单复制到站点。在版本之间的重叠中,客户必须弄清楚哪个是最新的清单版本,但这当然是可行的。我想,我坚持要一些更简单的东西,但如果没有其他答案,我会接受这个。
    • 我突然想到,更新清单仍然会遇到同样的问题,尽管它可能要小得多,因此风险也较小。也许您可以删除旧的清单,更新新的 DLL,然后上传新的清单。当前下载旧 DLL 的任何客户端都将继续正常运行,如果新客户端发现清单丢失,它可以等待并在 10 秒内重试或其他任何时间。下载清单后,客户端可以检查一些文件结束标记以确保它是完整的。
    • 我已经考虑过了。我不认为,我应该更新清单。相反,清单名称也应该是版本化的。然后,客户端可以从查找最新的清单开始,然后下载该清单以及随附的 dll。一段时间后,比如说一个小时或一天左右,所有下载过旧清单的客户端都会下载旧的 dll,而当前下载的只是新版本,因此可以删除旧版本。为了确保新清单完全上传,我可以用另一个名称创建它,然后重命名。
    • 我仍然认为对于这个问题必须有这样一个特别的解决方案很奇怪,我认为这是相当普遍的。不过还是谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2012-07-07
    • 2012-11-11
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    相关资源
    最近更新 更多