bt客户端源码分析之一:总述作者:小马哥日期:2004-6-24
客户端的功能: 【程序编程相关:在 Linux 下提升 bash 权限!】
概述:相对于 tracker 服务器来说,bt客户端要复杂的多,bram cohen 花了一年 full time 的时间来完成 bt,我估计其中大部分时间是用在 bt 客户端的实现与调试上了.由于 bt 客户端涉及的代码比较多,我不能再象分析 tracker 服务器那样,走上来就深入到细节之中去,那样的话,我写的晕晕糊糊,大家看起来也不知所云.所以第一篇文章先来谈谈客户端的功能.相关协议,以及客户端的总体架构与相关的类的层次结构.这样,从整体上把握之后,大家在自己分析代码的过程中,就能做到胸有成竹. 【推荐阅读:商业智能该如何开始?】
相关协议:对客户端来说,它需要处理两种协议:1.与 tracker 服务器交互的 track http协议.2.与其它 peers 交互的 bt 对等协议. 【扩展信息:在 Linux 下直接使用 ISO 映像】
不看代码,只根据 bt 的相关原理,大致可以推测,客户端需要完成以下功能:1.解析 torrent 文件,获取要下载的文件的详细信息,并在磁盘上创建空文件.2.与 tracker服务器 建立连接,并交互消息.3.根据从 tracker 得到的信息,跟其它 peers 建立连接,并下载需要的文件片断4.监听某端口,等待其它peers 的连接,并提供文件片断的上传.
总体架构:从总体上来看,bt客户端实际是以一个服务器的形式在运行.这一点似乎有些难以理解,但确实是这样.为什么是一个服务器了?客户端的主要功能是下载文件,但作为一种p2p软件,同时它必须提供上传服务,也就是它必须守候在某一个端口上,等待其它peers 的连接请求.从这一点上来说,它必须以一个服务器的形式运行.我们在后面实际分析代码的时候,可以看到,客户端复用了 rawserver 类用来实现网络服务器.客户端的代码,是从 download.py 开始的,首先完成功能1,之后就进入服务器循环,在每一次循环过程中,完成功能 2.3.4.其中,rerequester 类负责完成功能2,它通过 rawserver::add_task(),向 rawserver 添加自己的任务函数,这个任务函数,每隔一段时间与 tracker 服务器进行通信.而encoder.connecter 等多个类组合在一起,完成功能3与4.
类层次结构:
bt 客户端涉及的类比较多,我首先大致描述一下这些类的功能,然后给出它们的一个层次结构.
1.rawserver:负责实现网络服务器
2.rerequester:负责与 tracker 通信.它调用 rawserver::add_task() ,向 rawserver 添加自己的任务函数 rerequester::c().
3.encoder:一种 handler类(在分析 tracker 服务器时候提到),负责处理与其它peers建立连接与以及对读取的数据按照bt对等协议进行分析.
... 下一页