一. 前言

  libtorrent是著名的BT下载开源库,基于boost库编写,可以实现BT下载功能而且功能齐全,代码也值得研究,在此开文分析libtorrent的源码。一切就从整体框架开始吧。

二. bt下载流程简介

  1. 磁力链接和种子文件
      BT下载的第一步是众所周知的下载磁力链接/种子文件,然后下载程序会根据磁力链接/种子文件来下载文件。这是作为用户表层看到的下载过程。实际上磁力链接和种子文件的作用在于为本地客户端寻找拥有相同下载目标的其他各个客户端以及中央服务器(tracker)。

  2. 建立链接
      标准p2p下载是客户端和客户端之间的下载,需要通过peer wrie协议建立链接。peer wire协议是封装在udp/tcp之上的协议,实现了不同客户端之间的握手、下载完成情况的分享、下载/上传的请求、种子文件的寻找等步骤。

  3. 下载文件
      下载文件按一定的块大小进行划分,之后问询各个客户端是否具有相应的块,有则下载。下载完成一个块后通知其他客户端已拥有该块。

  4. 下载完成

三. 代码大致框架

  根据上述下载流程,我们可以将libtorrent代码分为以下几部分:

  • 磁力链接和种子文件的处理部分,主要包括torrent, bdecode, bencode, file_storage等几部分代码
  • 底层API部分, 包括文件相关的block, file, io,piece_picker,infohash以及底层协议相关的libutp,tcp,http等部分代码
  • 协议相关代码,包括peer_connection,bt_peer_connection,web_peer_connection,peer_info,bitfield等部分
  • 其他部分

四. 总结

  本文简要分析了libtorrent的框架组成,在后续文章会逐步分析各部分源码。


欢迎关注本人公众号,公众号会更新一些不一样的内容,相信一定会有所收获。

libtorrent源码分析(一)整体框架相关推荐

  1. Apollo 2.0 框架及源码分析(一) | 软硬件框架

    原文地址:https://zhuanlan.zhihu.com/p/33059132 前言 如引言中介绍的,这篇软硬件框架多为现有消息的整合加一些个人的想法.关于 Apollo 介绍的文章已经有许多, ...

  2. Nmap源码分析(基本框架)

    Nmap是一款非常强大的开源扫描工具.自己在使用过程中忍不住想仔细阅读一下它的源码.源码里面汇集了众多安全专家的精巧设计与优雅写法,读起来令人心旷神怡而又受益匪浅. 这里我们以阅读nmap6.0的代码 ...

  3. Spark详解(七):SparkContext源码分析以及整体作业提交流程

    1. SparkContext源码分析 在任何Spark程序中,必须要创建一个SparkContext,在SparkContext中,最主要的就是创建了TaskScheduler和DAGSchedul ...

  4. jQuery 2.0.3 源码分析core - 整体架构

    拜读一个开源框架,最想学到的就是设计的思想和实现的技巧. 废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery ...

  5. jQuery源码分析系列 : 整体架构

    query这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery又给扫一遍 我也不会照本宣科的翻译源码,结合自己的实际经验一起拜读吧! ...

  6. MMKV_微信MMKV源码分析(一) | 整体流程

    在使用MMKV框架前,需调用以下方法进行初始化 MMKV.initialize(context); 复制代码 这里的 Java 层主要是获取到保存文件的路径,传入Native层,这里默认的路径是APP ...

  7. Nmap源码分析(整体架构)

    整体架构 功能目录 docs :相关文档 libdnet-stripped :开源网络接口库 liblinear:开源大型线性分类库 liblua:开源Lua脚本语言库 libnetutil:基本的网 ...

  8. Mongodb 源码分析:整体架构

    最近一直在学习Mongodb的源码,很希望能够搞清楚Mongodb内部的具体实现.从Mongodb中文社区和其他人的博客里面学到了很多, 因此, 开了这个博客希望把自己学到的一些分享给大家. 任何源码 ...

  9. ffplay源码分析:代码框架

    1. 代码框架 本节简单梳理ffplay.c代码框架.一些关键问题及细节问题在后续章节探讨. 1.1 流程图 1.2 主线程 主线程主要实现三项功能:视频播放(音视频同步).字幕播放.SDL消息处理. ...

  10. 【Java源码分析】集合框架-Collections工具类-Arrays工具类

    集合框架Collection 和Collections和Arrays工具类 一开始总是搞不清楚Collection和Collections的区别,不过看下代码应该很清楚,一个是接口,一个是工具类 Co ...

最新文章

  1. 如何让vue项目打包出来之后更加小巧?
  2. 史上最全的Chrome使用技巧集锦
  3. mysql锁机制(Innodb引擎)
  4. CAS实现单点登录方案(SSO完整版)
  5. “碰瓷”特斯拉翻船,卡车界明星创企Nikola身陷“骗局”危机
  6. README.md怎么写比较好
  7. L1-045 宇宙无敌大招呼 (5 分)—团体程序设计天梯赛
  8. 多版本Python共存的配置和使用
  9. Python项目部署到Docker的完整过程
  10. STM32F407 硬件IIC驱动MCP4017 数字电位器
  11. 走过电竞之路的程序员
  12. SnakeYAML配置文件解析器
  13. android 跑马灯速度,textView跑马灯效果
  14. 豪斯多夫(Hausdorff)距离
  15. 机器学习的6个核心算法
  16. Git学习二、GitLab官网,安装自己的一个私有Gitlab代码管理库
  17. ORA-02002error while writing to audit trail 问题处理
  18. HTTP状态码code类型
  19. 2020-05-09
  20. One-hot的使用

热门文章

  1. 大学心理学课本_大学心理学专业用的是什么教材 名字叫什么
  2. socket编程常用函数
  3. 虚拟机安装win10教程(详细版)
  4. 极验滑动验证码的识别
  5. fgo服务器维护补偿,FGO游戏内显示问题修复通知 全服补偿2个金苹果
  6. 信息安全工程师真题1
  7. 操作系统死锁 四个必要条件
  8. 区块链相关技术学习总结(1)——区块链以及区块链技术入门详解
  9. 手机日志抓取工具及注意事项
  10. js对联广告,顶部浮动广告,固定位置广告插件