我必须实现一个用于文件共享的中间件系统,它必须拆分文件,这与bittorrent上发生的情况不同,后者从varios源同时发送和接收单独的部分。我怎么做?它是一个库还是我必须自己实现文件分割?

有帮助吗?

解决方案

将文件拆分成块,假设每个块100KB。然后在每个块上计算SHA哈希(或其他一些哈希算法)。因此,如果文件是905KB,您将计算10个这样的哈希值。

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

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

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

其他提示

看看Split& amp;的执行情况Concat(GNU软件)。

您可能需要考虑使用Solomon-Reed编码。这将使得最终的块更容易。这是微软在Avalaunch中采用的路线。

出于兴趣:为什么不实施BitTorrent或类似的东西?有许多OpenSource客户端(即 Azureus ),协议是非常简单。还有一篇文章更详细一点,但这包含一些扩展 - 有疑问,官方规范总是正确的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top