2022.1.14 文档完成
2022.1.16 更新类图和类间关系
2022.1.17 更新类图和类间关系
2022.1.21 根据第二次需求内容更新用例图、类图及相关文档
2022.1.27 根据实际内容对设计进行更改
2022.2.7 根据实际内容对设计进行更改
-
可以通过参数指定要下载的文件地址,下载的并发线程数(默认线程数为8),存放文件的地址(默认为当前目录)。
包括以下参数:
--url URL, -u URL URL to download --output filename, -o filename Output filename --concurrency number, -n number Concurrency number (default: 8)
注意:并不是所有网站都支持多线程并发下载,需要先进行检测。
指定下载地址时
- 可以在参数中指定多个要下载的文件地址,即允许使用多个url参数
- 可以将这些地址放入一个文本文件中,指定从该文件中读取。参数
--input filename, -i filename filename with multiple URL
- 支持使用正则表达式来生成多个下载地址,
同时,除支持http/https协议外,也能够支持如ftp, bittorrent,磁力链等。
多线程下载软件通过用户的基础设置之后自行进行工作,若是对单个文件进行下载,用户需要设置下载链接、多线程启用的线程数、以及文件的存放位置和名字三项,其中,如果是通过种子文件下载,则不需要设置下载链接,而需要设置种子文件的位置;若是对多个文件进行下载,用户需要指定多个下载链接、多线程启用的线程数、以及文件的存放位置,或者将多个下载链接存于文件,指定文件位置。软件内部按照用户设定的方式,完成文件的下载,若服务器不支持多线程下载会使用单线程完成,无法下载会告知用户。
我们这里将使用者命名成用户,用户使用该软件的下载功能
用例名称:下载1
基本事件流:用户完成基础设置,多线程并发下载链接中的文件
扩展事件流:服务器不支持多线程下载则使用单线程下载,链接不可下载则告知用户
前置条件:用户完成基本设置
后置条件:下载可行性及方式判定
异常:链接无法下载
用例名称:下载2
基本事件流:用户完成基础设置,多线程并发下载ftp服务器上的文件
扩展事件流:服务器不支持多线程下载则使用单线程下载,链接不可下载则告知用户
前置条件:用户完成基本设置
后置条件:下载可行性及方式判定
异常:链接无法下载,用户名或密码错误,服务器没有响应
用例名称:下载3
基本事件流:用户完成基础设置,多线程并发下载其他peer上的文件
扩展事件流:没有可用的下载源
前置条件:用户完成基本设置
后置条件:下载可行性及方式判定
异常:没有可用的tracker,没有可用的peer
用例名称:下载4
基本事件流:用户完成基础设置,将Magnet文件转换为Torrent文件,多线程并发下载其他peer上的文件
扩展事件流:没有可用的下载源
前置条件:用户完成基本设置
后置条件:下载可行性及方式判定
异常:没有可用的tracker,没有可用的peer
其中Torrent的实现比较复杂,我们为它单独设计一个类图
类 | 属性 | 服务 |
---|---|---|
Download | 下载链接、线程数、文件名 | 开始下载文件、设置下载链接、设置线程数、设置文件名 |
File | 文件名、文件大小、文件内容 | 创建文件,读取内容,写入内容 |
Protocol.Protocols | 无 | 连接、获取文件大小,获取文件内容 |
Protocol.Http | 链接地址 | 连接、获取文件大小,获取文件内容 |
Protocol.Ftp | 链接地址、用户名、密码 | 连接、获取文件大小,获取文件内容 |
Bittorrent | 链接地址、tracker、peer | 连接、获取文件大小,获取文件内容 |
Protocol.Magnet | 链接地址 | 连接、获取文件大小,获取文件内容 |
ThreadPool | 线程、线程数 | 执行线程任务 |
DownloadTask | 下载区间 | 执行下载任务 |
Block | 块开始位置,块结束位置 | 获取块开始位置,获取块结束位置 |
SingleDownload | Protocol.Protocols、block | 开始下载 |
类名称 | 类名称 | 类间关系 |
---|---|---|
File | SingleDownload | 一对一普通关联 |
ThreadPool | Download | 一对一普通关联 |
Protocol.Protocols | SingleDownload | 一对一普通关联 |
SingleDownload | Download | 一对一普通关联 |
DownloadTask | Download | 一对一普通关联 |
Download | Block | 一对多受限关联 |
DownloadTask | Block | 一对一普通关联 |
Download | DownloadTask | 一对多受限关联 |
见3.1
描述了多线程下载器中所包含的初步的类和类间关系
实体类有File, Download, ThreadPool, Block, Protocol.Http, Protocol.Ftp, Bittorrent, Protocol.Magnet
方法类有Protocals,DownloadTask类
类间的属性和方法见3.2
类间关系见3.3
无
(在torrent和magnet模式下是默认支持多线程的)
描述了“多线程下载器”中单个文件下载过程的活动图,涉及Download、Threadpool、File、Protocols四个核心对象,他们共同完成下载的过程
参与者User并不在下载的主体逻辑中,只负责启动程序,这里没有画出
Download、Threadpool、File、Protocols是对象,Download是总控,负责调用其他对象完成任务,Threadpool负责启动和管理线程,Protocols主要和文件下载链接进行一系列的网络交互,File则是将从报文中收到的内容写入文件
由Download发送网址或文件给Protocols判断下载来源的服务器是否可以并发下载,如若可以,通知线程池创建多线程,每个线程都通过Protocols获取下载内容,然后通知File将内容写入文件;若不支持并发,则直接由单线程完成上述过程;若根本不可下载,则告知用户并退出。
在该活动中,有一个分支控制,根据服务器对下载的支持情况,选择对应的下载方式或异常处理
无
虽然我们可以把torrent和magnet部分的交互抽象成上面的样子,但是这并不利于我们理解它的程序运行过程,所以这里我们单独为它设计一份程序流程图(magnet可以转换为torrent文件进行下载,所以只作出torrent的流程图设计)