我必须实现一个用于文件共享的中间件系统,它必须拆分文件,这与bittorrent上发生的情况不同,后者从varios源同时发送和接收单独的部分。我怎么做?它是一个库还是我必须自己实现文件分割?
答案 0 :(得分:4)
将文件拆分成块,假设每个块100KB。然后在每个块上计算SHA哈希(或其他一些哈希算法)。因此,如果文件是905KB,您将计算10个这样的哈希值。
服务器将为其提供的每个文件包含一个哈希定义文件。此哈希定义文件将包含文件的所有块的列表以及哈希。因此,如果服务器正在提供名为test.exe的905KB文件。然后我们将有另一个名为test.exe.hashes的文件,其中包含该文件的10个哈希的列表。
客户端将下载哈希定义文件,并确保它具有所有块。客户端可以单独请求每个块,在下载之后,它可以再次计算其末端的哈希,以确保没有损坏。
您不需要物理拆分文件,拆分文件只是读取您感兴趣的部分文件。文件的第一个块是从字节范围0到102399,下一个块是从102400到204800,等等。因此,只需打开文件,寻找该位置,读取数据,然后关闭文件。
答案 1 :(得分:0)
看看Split& amp;的执行情况Concat(GNU软件)。
答案 2 :(得分:0)
您可能需要考虑使用Solomon-Reed编码。这将使得最终的块更容易。这是微软在Avalaunch中采用的路线。
答案 3 :(得分:0)
出于兴趣:为什么不实施BitTorrent或类似的东西?有许多OpenSource客户端(即Azureus),协议为really simple。还有an article with a little more detail,但这包含一些扩展 - 毫无疑问,官方规范总是正确的。