Rasterbar Libtorrent 的简单分析
来源:互联网 发布:京瓷扫描仪软件 编辑:程序博客网 时间:2024/05/17 02:00
最近在做的一个P2P项目需要使用到一些基础的IO,网络通信的模块,自己写的话短时间内很难达到产品级的健壮性,所以就从现有的开源项目里面抽取模块了,看了看eMule的,这东西和MFC结合紧密,而且整个项目大的可怕,要编译成功都很麻烦,更不要说去抽取它的模块了。不大靠谱。于是就研究了一下LibTorrent,不过这东西有两个。我研究的是Rasterbar的版本。现在的版本是0.15.0。不过这东西整了个openssl的功能。openssl在windows下编译麻烦死了,关键还得装个perl还是python忘了,代码也复杂了。所以我花了点时间把openssl给剥离出去。还好作者写的代码思路清晰,都用宏定义划分了不同功能的分支。
libtorrent的类结构中最大的一个结构就是alert结构了(点击看大图).
alert
对于外部程序来说,libtorrent的pop_alert()函数正是外部程序用来从libtorrent中获取各种消息、警告、错误等信息的接口。按照官方文档的说明,如果没有任何可用的这些信息的话,就自动返回一个默认构造的auto_ptr对象。由此可见。这个alert的继承树中的各种具体的对象,就分别代表了不同的信息了。对于libtorrent来说,它内部维护了一个alert的队列。此外,libtorrent默认是只保存错误消息的。可以使用set_alert_mask来设置。当然,获得了一个auto_ptr对象的话自然还必须知道具体是哪一个,所以libtorrent就使用alert_cast<>来获得具体的详细类型。alert的具体类型都定义在libtorrent/alert_types.hpp文件中。
alert的代码是这样的:
关于每个alert的具体描述,官方文档这里有说明。
libtorrent_exception
libtorrent中的不少函数有两个版本,一个会抛出异常,一个是接受一个引用,返回异常代码。因为直接使用了boost的error code来表示错误,所以结构比较简单。
storage_interface
storage_interface是libtorrent中我最关心的一部分了,这个接口是个纯虚函数,目的是可以让开发者定制特定的种子对应的文件保存位置,默认使用一个代表存储在本地磁盘的文件的实现。storage_interface是基于槽实现的,每个槽有piece_size个字节。所有对磁盘的读写都是基于完整的或者部分的槽。
文件是分片了,但是关于文件分片在程序中的读取优先级,则主要在torrent_handle中处理
torrent_handle
torrent_handle中对文件下载顺序影响最大的一个函数就是set_piece_deadline()函数了,这个函数给每个片段设置一个截止期限,libtorrent会在截止期限终止之前去尝试下载这个片段.而piece_priority() prioritize_pieces() piece_priorities()则设置了每个片段的优先级(注意是和其available有关的).
- Rasterbar Libtorrent 的简单分析
- libtorrent分析
- 基于libtorrent最简单的BT下载程序
- libtorrent
- 减少libtorrent的内存使用和让libtorrent支持ntfs
- libtorrent在linux下的编译笔记
- LibTorrent库的中文支持问题
- 基础研究--libtorrent库的使用
- window下VS2008编译libtorrent的过程
- ubuntu下libtorrent库(rakshasa)的编译
- windows下vs 2015下libtorrent库的配置,vs2015下-boost-openssl-libtorrent的配置
- libtorrent编译
- 分析简单的数据
- 简单的版面分析
- Sipdroid的简单分析
- MapwinGIS的简单分析
- MapwinGIS的简单分析
- string 简单的分析
- [翻译]WINCE6.0下配置BSP内存映射
- js控制时间实时走动
- 菜鸟学习GCC的一个小问题
- 互联网架构演变的典型过程
- ONSIZE函数中调整CComboBox的问题
- Rasterbar Libtorrent 的简单分析
- Discuss on closure
- 写博客有没有分的呀
- oracle中导入数据的方法
- Scala Learning
- 代码中控制TabHost中标签Tab的高度和宽度(Android)
- YouTube 的架构扩展
- FLEX自定义事件
- 在DataGridView控件中加入ComboBox下拉列表框的实现