跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 一个程序通过 ftp 下载文件,另外一个程序读取,两个都是定时执行
未分類
19 4 月 2020

一个程序通过 ftp 下载文件,另外一个程序读取,两个都是定时执行

一个程序通过 ftp 下载文件,另外一个程序读取,两个都是定时执行

資深大佬 : zarte 54

如果读取的时候正在下载该文件,如何实现先读取一部分?
有不上锁等待的方式吗?

大佬有話說 (22)

  • 資深大佬 : BingoXuan

    下载文件名和读取文件名不一样,下载程序下载完就重命名,读取程序每秒判断有没有对应名称的文件

  • 資深大佬 : superrichman

    改成分片下载,另外一个程序读取分片数据

  • 資深大佬 : mrjnamei

    读一部分的目的是干嘛呢?既然要文件的内容读到的那一部分有啥用呢

  • 資深大佬 : cmdOptionKana

    既然是定时,可以放在不同的文件夹里。

    比如第一次下载的文件全部在文件夹 1 里,第二次在文件夹 2 里。

  • 資深大佬 : hiouyuu

    读取的时候,查询两次文件尺寸,不变则认为文件已经上传完成。
    不太严谨

  • 資深大佬 : augustheart

    只是要实现写的时候读取的话很容易啊。实际上所不锁完全看 ftp 的实现。比如 windows 的 createfile 完全可以让你做到这些,linux 我不熟,但是从 fd 下手应该也是没问题的。
    这个需求的问题在于为啥要这么干,比如一个压缩包,你不作特殊处理从头到尾边下边读是毫无意义的( zip 的文件表在包结尾)。实现起来都是没有任何难度的。

  • 主 資深大佬 : zarte

    @mrjnamei 因为文件是定时获取追加的。下载使用一个程序,读取会有多个程序。

  • 主 資深大佬 : zarte

    @cmdOptionKana 并不是一次性下载完的,需要定时获取新数据。

  • 主 資深大佬 : zarte

    @augustheart 是文档,想实现的是一个下载多个读取。

  • 資深大佬 : fengtons

    另外增加个文件记录下载状态,读之前先判断是否已经下载完成。

  • 主 資深大佬 : zarte

    @fengtons 那跟上锁没区别了呀!不用等下载完成的。先获取目前下载好的就行。剩下的下次再读。

  • 資深大佬 : cmdOptionKana

    @zarte 一样的思路,定时或者定量分片,直接 文件名+“01” 作为一个分片的文件名,接着生产下一个分片继续下载(隐约记得以前有些下载工具就是这么干的)

  • 資深大佬 : songco

    ftp 是代码实现的?

    如果是代码实现的, ftp 顺序下载不分块, 读取应用先判断一下文件大小, 读到一部分, 然后再判断文件大小不就行了

    如果分块下载那确实不好做, 估计要个第三方服务记录分段完成信息, 比如另外搞一个文件, 记录分块和每块完成的情况, 读取的应用可以根据这个读.

    感觉你这个需求比较奇怪, 还是从应用场景上优化一下把.

  • 資深大佬 : augustheart

    @zarte 没有技术问题,读取不锁文件写入不锁文件就行了。锁文件这个操作是上层的实现做的,并非系统读写文件接口一定会锁住文件。
    实际上你想实现多个写多个读都没问题,操作系统允许你这么干。(当然,多个写你最后写出来的是什么东西就听天由命了)
    给你个实例:百度网盘的视频预览功能,实际上就是边下边读

  • 主 資深大佬 : zarte

    @augustheart 谢谢我试下看看

  • 資深大佬 : loading

    ftp 是单线程吧,记下读取文件指针就行了,读第二次再从指针处继续

  • 主 資深大佬 : zarte

    @songco 代码实现的。想要的就是这种效果。一个程序复制下载,另外多个程序来读。要解决的是
    1.当在下载时多个程序同时读是否支持。
    2. 支持的情况下。如何实现按行读取,剩下的未满一行的留着下次时间片继续读。

  • 主 資深大佬 : zarte

    @loading ftp 的断点续传这个知道。 之前是一个程序里面先下载然后再读,现在想拆开,一个程序来下载,多个程序来读。

  • 資深大佬 : loading

    如果下载程序也是你开发,可以参考浏览器下载行为,正在下载就再放一个空的 下载文件名+.lck 的文件。然后读取程序查询这个文件锁。
    linux 的软件源就是这样处理的。

  • 資深大佬 : qiayue

    我们有类似场景,两台服务器,从 A 服务器通过脚本调用,把 AD 目录下的文件通过 SFTP 推送到 B 服务器的 BD 目录,之后 B 服务器的定时程序处理 BD 目录的文件。
    那么在 A 服务期的脚本里写的是, 推送时文件名为 xxxx.tmp ,推送完成后改名为 xxxx.log 。
    在 B 服务器里定时任务,定时扫描 .log 文件,略过 .tmp 文件。

  • 主 資深大佬 : zarte

    @loading 我先试试上说的不加锁直接读的。

  • 資深大佬 : msg7086

    FTP 本来就没有锁。FTP 软件可以自己实现读写锁,但是并不是必须的。
    我平时自用的一台 FTP 就没有锁读写,一边上传另一边就可以开始下载。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具