10个版本 (6个破坏性更新)
使用旧的Rust 2015
0.6.0 | 2017年11月15日 |
---|---|
0.5.3 | 2017年7月15日 |
0.4.0 | 2017年7月9日 |
0.3.0 | 2017年7月6日 |
0.0.0 | 2017年1月27日 |
#870 in 文件系统
每月35次下载
225KB
4.5K SLoC
BitTorrent基础设施项目
一组用于构建使用BitTorrent技术的应用程序的Crates。
聊天:irc.mozilla.org #bip.rs
Bencode (bip_bencode) -
关于: Bencode是BitTorrent技术中使用的二进制编码,从元信息文件到DHT消息。Bencode类型包括整数、字节数组、列表和字典,其中后两种可以包含任何Bencode类型(它们可以递归构建)。
磁盘 (bip_disk) -
关于: 磁盘管理主要是将块存储到/从任何实现FileSystem
接口的对象中,这意味着种子存储可以透明地发送到磁盘、存储在内存中、推送到分布式文件系统,或者当块到来时甚至上传到云端。此外,当发送足够多的块到磁盘管理器以形成一个完整的块时,会发送通知,以便一旦检测到良好的或损坏的块。
握手 (bip_handshake) -
关于: 握手是与对等连接并交换有关对等如何与你通信以及反之亦然的信息的过程。在我们的案例中,有几种BitTorrent技术通常可以认为是发现对等机制(本地对等发现、DHT、追踪器、对等交换),一旦发现对等,客户端可能希望立即通过握手尝试建立连接。此模块提供用于自定义握手实现的trait以及标准的BitTorrent握手,以便客户端可以为对等发现服务指定握手机制,以便将联系信息转发。
对等节点(bip_peer)-
关于:与比特洪流对等节点通信包括阻塞(告诉某人我们现在不会响应他们)、表达兴趣(告诉某人,如果我们没有被阻塞,我们会对他们持有的某些数据感兴趣),以及向对等节点下载和上传数据块。此包定义了一些常见的比特洪流消息,包括那些作为 ExtensionBits
部分在 bip_handshake
中,以及包含在 扩展协议 中的那些。我们还提供了一个 PeerManager
,用于心跳对等节点和多路复用发送到/从对等节点发送的消息,以便客户端能够更容易地异步与许多对等节点通信。
选择(bip_select)-
关于:选择被分为三个算法类别。首先,我们有 块揭示,它侧重于确定我们应该揭示哪些块(即使我们没有该块...)以及向谁揭示。其次,我们有 块选择,它侧重于我们应该下载/上传哪些块。第三,我们有 块排队,即给定一个我们想要下载的块,我们应该向哪些对等节点发送此类请求。我们可以混合和匹配不同的算法来创建可能具有不同于其他群体的特征的群体。
主线DHT(bip_dht)-
关于:主线DHT用于比特洪流分发对特定文件感兴趣的对等节点的联系信息。更普遍地说,任何应用程序都可以使用主线DHT以分布式和去中心化的方式发现对等节点。只要你的应用程序有通过SHA-1哈希(20字节值)公开对其他对等节点感兴趣的方式,你就可以利用DHT。
示例:例如,一个去中心化聊天应用程序可以要求用户输入要加入的房间名称,然后你可以对该房间名称进行哈希处理,并使用该应用程序搜索其他也对加入同一房间感兴趣的对等节点。
元信息(bip_metainfo)-
关于:元信息文件的核心理念是为对特定文件感兴趣的客户提供一个校验和列表,每个已哈希块应有多长,以及文件的目录结构。这允许客户端验证接收到的文件完整性,以及能够重新创建文件的精确目录结构。除此之外,还可以在此文件中包含大量可选信息,例如在DHT中要联系的网络节点、要联系追踪器、以及注释、创建日期、创建元信息文件的人等。
追踪器(bip_utracker)-
关于:跟踪器为比特洪流生态系统中的对等发现提供了一个集中式解决方案。客户端向一组特定的跟踪器发送消息,更新它们关于文件下载状态变化的信息。然而,我们可以通过使用开始和停止事件,将跟踪器通用化来添加或删除我们自己在跟踪器中,以达到任何应用程序中对等发现的目的。
参考文献
- 官方规范
- 可读规范
- 非官方规范
- 其他有趣论文
许可
根据以下任一项许可
- Apache License, Version 2.0, (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则根据Apache-2.0许可证定义的,你有意提交以包含在本作品中的任何贡献,都将以上述双重许可方式许可,不附加任何额外的条款或条件。
依赖
~10MB
~162K SLoC