P2P学习——libtorrent-rasterbar的选片流程浅析

本文详细解析了libtorrent-rasterbar库中P2P学习的选片流程,涉及piece_picker和policy模块的核心函数request_a_block()与pick_pieces()。选片流程包括数据检查、prefer_whole_pieces计算、请求队列与下载队列的处理、速率等级评估、忙碌块检查、全局策略应用等环节。此外,文章还介绍了不同优先级的选片策略,如指定优先级、逆序下载、顺序下载和平庸片优先等。
摘要由CSDN通过智能技术生成

以下内容是基于libtorren-rasterbar-0.15.10版本的内容进行讲解的。


选片流程的核心操作应该是包含在policy.hpp.cpp和piece_picker.hpp.cpp文件中的。piece_picker中进行的操作在是数据片队列以及数据块这一层进行的;而policy这一层进行的工作则要考虑一些全局的东西在里面,也可以说是进行piece_picker工作的外层包装。

就目前的认识程度来看,选片流程的核心函数至少有两个:request_a_block(..)(在policy.hpp.cpp中) 和 pick_pieces(..)(在piece_picker.hpp.cpp中)。

进入选片核心操作的函数调用方式有两类,一类是通过调用peer_is_interesting函数来进一步调用request_a_block,另一类是直接调用request_a_block。第一类调用方式包括update_interest, incoming_have, incoming_bitfield, incoming_have_all等处理函数,第二类调用方式包括incoming_unchoke, incoming_piece等处理函数。至于update_interest, incoming_piece等数据片的获取工作循环的相关内容不作为这里的讲解内容。

约定:torrent-下载实例,peer_connection-链接实例,piece_picker-选片实例,policy-策略实例。

接下来我们简单讲解request_a_block函数(作为参考,可能存在理解上的偏差):
  0)具体的数据检查和状态检查这里略过不提;
  1)考虑到节点间在具体的数据传输过程中是以数据块(数据片的子单位)为单位进行的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值