为P2P应用程序拆分文件

时间:2020-03-06 14:56:32  来源:igfitidea点击:

我必须实现一个用于文件共享的中间件系统,并且它必须拆分文件,这与bittorrent一样,即从varios源同时发送和接收单独的片段。我怎么做?是图书馆还是我必须自己实现文件拆分?

解决方案

将文件分成多个块,每个块为100KB。然后在每个块上计算SHA哈希(或者其他哈希算法)。因此,如果文件为905KB,则将计算出10个这样的哈希值。

服务器将为其服务的每个文件包含一个哈希定义文件。该哈希定义文件将包含文件的所有块的列表以及哈希。因此,如果服务器正在提供我们的905KB文件test.exe。然后,我们将有另一个名为test.exe.hashes的文件,其中包含该文件的10个哈希值的列表。

客户端将下载哈希定义文件,并确保它具有所有块。客户端可以单独请求每个块,下载后,它可以再次计算其末尾的哈希值以确保没有损坏。

我们不需要物理拆分文件,拆分文件只是读取我们感兴趣的部分。文件的第一个块是字节范围0到102399,下一个块是102400到204800,等等。因此,只需打开文件,搜索到该位置,读取数据,然后关闭文件即可。

查看Split&Concat(GNU软件)的实现。

我们可能要考虑使用Solomon-Reed编码。这将使最终的程序块变得更加容易。这是Microsoft在Avalaunch中采取的路线。

出于兴趣:为什么不仅仅实施BitTorrent或者类似的东西?有许多开放源客户端(即Azureus),该协议非常简单。还有一篇文章有​​更多细节,但是其中包含一些扩展部分,有疑问,官方规范总是正确的。