Linux BT下载(5)-系统结构设计

来源:互联网 发布:淘宝哪家精工机械杆好 编辑:程序博客网 时间:2024/05/19 08:46

系统结构设计


整个系统模块结构如图:

整个系统的功能模块分布:

(1)种子解析:负责解析种子文件,从中获取Tracker服务器的地址,待下载文件的文件名和长度,piece长度,各个piece的hash值。
(2)连接Tracker:根据HTTP协议构造获取Peer地址的请求,与Tracker建立连接,解析Tracker的回应消息,从而获取各个Peer的IP地址和端口号。
(3)与Peer交换数据:根据Peer的IP地址和端口号连接Peer、从Peer出下载数据并将已下载的数据上传给Peer。
(4)出错处理:定义整个系统可能出现的错误类型,并对错误进行处理。
(5)运行日志:记录程序运行的日志,并保存错误进行处理。

作为核心功能“与Peer交换数据”有以下划分:


(1) peer管理:系统为每个已建立TCP连接的peer构造一个peer结构体。本模块负责管理peer链表,添加和删除peer结点。
(2)消息处理:peer与peer之间以发送和接受消息的方式进行通信。本模块负责根据当前的状态生成并发送消息,接受并处理消息。其中对下载和上传数据最重要的是request消息和piece消息。request消息向peer发送数据请求,指明请求的是哪个piece的哪个slice。peer接收到request消息后根据当前的状态,决定是否发送数据给对方。如果允许发送,则构造piece消息,数据被封装在该消息中。每当下载完一个正确的piece时,就像所有peer发送have消息通告已经获得该piece,其他peer如果没有该piece就可以向peer发送数据请求,每次请求都是以slice为单位。
(3) 缓冲管理:将下载到的数据先缓冲起来,等到下载到一定量的数据后在集中写入硬盘。peer请求一个slice的数据时,先将该slice所在的整个piece读入到缓冲区中,下载peer在请求该piece的其他slice时,只需在缓冲区获取,避免了频繁读写硬盘。
(4)位图管理:客户端与peer建立了连接并进行握手后,即发送位图给peer告知已下载到哪些piece,同时也接收对方的位图并将其保存在peer结构体。没下载到一个piece就更新自己的位图,并发送have消息给所有已建立连接的peer。每当接收到peer发来的have消息就更新该peer的位图。
(5)策略管理:主要计算各个peer的下载和上传速度,根据下载速度选择并阻塞peer,采用随机算法选择优化非阻塞peer,以及实现片段选择策略。
(6)信号处理:在运行过程中,程序可能接收到一些信号,如:SIGINT、SIGTERM,这些信号的默认动作是立即终止程序。
0 0
原创粉丝点击