5.系统模块设计
来源:互联网 发布:白宫 翻译 知乎 编辑:程序博客网 时间:2024/05/20 18:18
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系统的日志模块设计
- 服务器基础模块设计-日志系统
- 客户管理系统之模块设计(一)
- 客户管理系统之模块设计(二)
- 客户管理系统之模块设计(三)
- 客户管理系统之模块设计(四)
- 程序员的单元测试
- java操作office和pdf文件
- 4.关键算法及策略
- 说什么student隐式类型和string不符合,求解决
- 版本控制入门简介
- 5.系统模块设计
- Python中运算符
- JSP————静态引入和动态引入
- ireport连接Oracle字符集乱码解决方案
- java 关于二叉搜索树,平衡二叉树,b树,二叉堆的几段代码
- Peer管理模块的设计和实现
- 兔子是怎样买到自己窝的~
- “项目管理”文章列表
- Linux cat命令用法