Networking 传输60GB+;网络上的文件?

Networking 传输60GB+;网络上的文件?,networking,ftp,network-programming,compression,Networking,Ftp,Network Programming,Compression,我即将开始开发一个应用程序来传输非常大的文件,没有任何匆忙,但需要可靠性。我希望那些编写过这样一个特殊案例的人能给我一个关于我将要进入的领域的见解 该环境将是intranet ftp服务器>到目前为止使用活动ftp普通端口windows系统。我可能还需要在发送之前压缩文件,我记得曾经使用过一个库,它可以压缩内存,并且大小有限制。。。对此也将不胜感激 如果我需要澄清其他事情,请告诉我。我请求通用/更高级别的gotchas,如果没有详细的帮助。我以前做过正常大小(高达1GB)的应用程序,但这一个似乎

我即将开始开发一个应用程序来传输非常大的文件,没有任何匆忙,但需要可靠性。我希望那些编写过这样一个特殊案例的人能给我一个关于我将要进入的领域的见解

该环境将是intranet ftp服务器>到目前为止使用活动ftp普通端口windows系统。我可能还需要在发送之前压缩文件,我记得曾经使用过一个库,它可以压缩内存,并且大小有限制。。。对此也将不胜感激

如果我需要澄清其他事情,请告诉我。我请求通用/更高级别的gotchas,如果没有详细的帮助。我以前做过正常大小(高达1GB)的应用程序,但这一个似乎我需要限制速度,这样我就不会破坏网络或类似的东西


谢谢你的帮助。

我想你可以从《激流》中获得一些灵感

Torrents通常将文件分成可管理的部分,并计算它们的散列。后来他们把它们一块一块地转移。每一个片段都经过哈希验证,只有在匹配的情况下才被接受。这是一种非常有效的机制,可以从多个源进行传输,也可以在不担心数据损坏的情况下重新启动任意时间

对于从服务器到单个客户机的传输,我建议您创建一个包含文件元数据的头文件,以便接收方始终知道预期内容,也知道接收到多少数据,还可以根据哈希检查接收到的数据


我已经在客户机-服务器应用程序上实际实现了这个想法,但数据量要小得多,比如1500k,但可靠性和冗余是重要因素。这样,您还可以有效地控制希望通过应用程序允许的通信量。

我认为应该使用rsync实用程序作为Python的外部进程

引述自:

使用校验和将片段复制到目标中可能存在的文件 并仅运输从现场未找到的零件 目标站点。在实践中,这意味着如果 目标站点中已存在要复制的文件版本, rsync只传输文件中丢失的部分。在许多情况下 这使得数据更新过程更快,因为所有文件都是 未在每次同步源站点和目标站点时复制

您可以使用-z开关动态压缩数据,以透明方式传输数据,无需启动压缩整个文件的任何一端

此外,请在此处检查答案:

从rsync的手册页上可以看到:


好主意!!它甚至不在我的脑子里!好主意。你在哪里学会了torrents的工作原理?你有什么有意义的链接吗?或者我可以买一本书来进一步调查?
   --partial
          By  default,  rsync  will  delete any partially transferred
          file if the transfer is interrupted. In some  circumstances
          it  is  more desirable to keep partially transferred files.
          Using the --partial option tells rsync to keep the  partial
          file which should make a subsequent transfer of the rest of
          the file much faster