5.系统模块设计
来源:互联网 发布:淘宝双十一晚会2016 编辑:程序博客网 时间:2024/05/20 18:03
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. 信号处理:在运行过程中,程序可能接收到一些信号。
- 5.系统模块设计
- 5.系统模块设计
- 系统权限模块设计
- 系统模块设计
- 预算系统的模块设计
- 医疗应用系统模块设计
- 简单的系统设计模块
- 文件资源管理系统用户模块设计
- 文件资源管理系统分类模块设计
- 系统参数模块的设计与开发
- 关于游戏逻辑系统模块的设计
- 工作流系统-业务流程模块的详细设计
- SCADA系统的日志模块设计
- 服务器基础模块设计-日志系统
- 客户管理系统之模块设计(一)
- 客户管理系统之模块设计(二)
- 客户管理系统之模块设计(三)
- 客户管理系统之模块设计(四)
- PLM的设计思想
- lwip双网卡移植的问题,以及特殊解决方法。
- superblock,dentry,inode浅析(译转)
- ios iphone开发 下拉更新
- 正则表达式
- 5.系统模块设计
- 我思故我在系列—数据结构NO.28题(题目搜集整理者JULY,非常感谢!!)
- CAD中缺少dfst.dll文件的解决办法
- 程序员面试题精选100题(08)-求1+2+...+n
- Objective-C 内存管理之dealloc方法中变量释放处理
- delphi控制excel大全
- 怎样消除心理压力
- 鼠标自定义样式
- sizeof有话说:“其实你不懂我的心”