如果没有任何一个成员拥有所有数据,但初始种子组拥有所有数据,那么可以创建 torrent 吗?

如果没有任何一个成员拥有所有数据,但初始种子组拥有所有数据,那么可以创建 torrent 吗?

假设社区中有几位成员一直在合作完成某个项目的部分工作,现在他们想分发他们的成果。我们假设引擎团队有一个名为“engine.data”的文件,车轮团队有“wheels.data”,安全带团队有“seatbelts.data”,等等。

期望的结果是一个 car.torrent 文件,其中包含 engine.data、wheels.data、seatbelts.data 等等,社区可以在他们之间以及与公众共享。

每个团队的文件均视为冻结且最终版本,并且一旦包含在该种子中将不会更新。

社区中的每个成员都有自己数据的完整版本,但没有成员拥有任何其他人的数据。如果已经存在一个 torrent,那就没问题了!每个成员都会播种他们拥有的块,同时接收他们没有的块……这正是 BitTorrent 的工作方式。但在这种情况下,还没有创建任何 torrent。会这样吗?如果是这样,怎么做到的?

答案1

不,这不是 torrent 的工作方式。创建 torrent 时,您会推送应有的数据,然后客户端会将其拥有的数据与服务器上存储的数据进行比较。因此,服务器不会将其数据添加到服务器上的 torrent 中,而是会删除其数据。

您想要做的是拥有一个全局 torrent 服务器,每个成员都可以将自己的部分添加为 torrent,这样整个项目组就可以下载所有单独的 torrent 并获得一个整体。您只需要一个 torrent 服务器来跟踪所有 torrent,但无论如何这都是一个要求,除非您只进行对等分发。我没有这方面的经验,所以我不知道这有多容易使用。

另外,请记住,一旦创建了 torrent,最初的创建者就不能只编辑他们的文件并期望它更新。相反,torrent 也会用 torrent 中的内容覆盖他们的更改。

每次更新时都必须创建一个新的 torrent。

Torrent 只是基于快照的分发,而不是更新服务。如果您想要更新,请使用基于云的存储解决方案,例如 OneDrive、Google Drive、DropBox 等...

答案2

社区中的每个成员都有自己数据的完整版本,但没有成员拥有任何其他人的数据。如果已经存在一个 torrent,那就没问题了!每个成员都会播种他们拥有的块,同时接收他们没有的块……这正是 BitTorrent 的工作方式。但在这种情况下,还没有创建任何 torrent。会这样吗?如果是这样,怎么做到的?

理论上这是可能的,但我认为目前还没有现成的工具可以实现。

创建.torrent文件的核心过程大致如下:

  1. 从...开始:
    torrent = {
        "info": {
            "files": [],
            "piece size": 4194304,
            "pieces": bytearray(),
        },
    }
    
  2. 确定所有文件的列表(其大小以字节为单位)并存储在torrent["info"]["files"]
  3. 将所有文件按照列表的顺序连接到单个流中;
  4. 将流分成固定大小的“块”(例如 4 MB);
  5. 计算每一块的SHA-1;
  6. 将所有片段的 SHA-1 哈希值连接起来并存储在中torrent["info"]["pieces"]
  7. 使用 Bencode序列化整个torrent结构并转储到 .torrent 文件中。

在步骤 1 中,您无法从多个来源汇编列表,确定哪个来源具有哪些片段范围,而在步骤 4 中,您无法要求每台机器为其自己的片段提供哈希值,这没有任何根本原因。您只需要编写自己的工具来完成所有这些操作。

(如果文件长度是片段大小的整数倍,则会有所帮助,但是某些 BitTorrent 应用程序已经插入空的“填充”文件以保持文件片段对齐,因此您也可以这样做。)

对于一个成员来说,首先下载其他所有人的数据(例如,为每个组件创建单独的种子),然后按照通常的创建种子的方式从这些数据中创建超级种子,这可能会更简单。

或者,您可以研究其他软件,例如dat

相关内容