QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2045|回复: 29

关于开发Linux下载工具的设计

[复制链接]
发表于 2005-5-1 00:52:59 | 显示全部楼层 |阅读模式
看见置顶的那个贴,真的很心酸!这么多人在讨论,竟然有人在问String类怎么用,用Command模式进行命令管理,就没有一个人想把该软件的整体设计搞出来吗??

如何用C++中某个类,如何实现某一部分功能,这都是我们可以自己解决的问题,我想既然想参加这个项目,连这种问题都要问,干脆回家卖红薯!

我也才在Linux下做开发半年多,也一直在用Linux,但是每到想下载一个大东西的时候,总是切换到Windows下,用FlashGet去下载。真没想到,这么多人在开发Linux,我用google搜了一下,竟然找不到合适的下载工具,这对于一个诞生于网络的操作系统来说,不能不是个可悲的事情。

所以在公司最近第一步开发计划完成的情况下,也想找几个合适的人一起开发一个能和FlashGet,BTCommit媲美的下载工具!偶然发现这里已经有一个同样的项目,所以就进来看看,不看还好,看了过后真是让人吐血!难道就没有人做总体方面的设计工作!大家都在做一些小细节方面的工作,提到的永远都是怎么用编程语言实现,coding就是大家的目标,但是没有一个好的设计方案,你就算精通C++,JAVA,你能实现这个东西吗?

唉,好了,不说了!

下面我来谈谈我对这个下载工具的看法!
发表于 2005-5-1 01:00:08 | 显示全部楼层
go on !
多线程下载有很多:axel , aria, prozilla, d4x,不过每个都有缺陷。
我也在写这个东西,权当学习了。
BT工具确实少些图形界面的,可以考虑用现成的c/c++ bt库,不过哪个java的青蛙也是不错的,不过我还是讨厌java所以希望这个实战派的兄弟写出个东西来啊!
回复

使用道具 举报

 楼主| 发表于 2005-5-1 01:04:10 | 显示全部楼层
我给软件取的名称QuickDown( ,可爱吗)

现在的下载软件一般要考虑一下几个方面:
1.为了支持文件操作,必须有一个统一的文件操作方式
2.为了支持断点续传,必须有一个数据库(简单的,文件式数据库)支持
3.为了支持多线程下载,必须要有一个统一的高效线程管理方式
4.为了有一个简易的协议操作接口,我们需要对网络协议进行设计,以便提供一个良好的接口类
5.当然还有一个很重要的东西,UserInterface
6.各个模块间的通讯方式的设计


做到了以上几点,应该就可以实现一个高效,可扩展,易操作的下载软件!

我目前正在做整体设计,想请教各位高手,看看还需要考虑哪些方面!

明天我会把对象以及各对象的接口列出来,供大家参考!
回复

使用道具 举报

发表于 2005-5-1 08:04:00 | 显示全部楼层
水平各有差异,问些基础问题也情有可缘。支持楼主,先给你顶顶。
回复

使用道具 举报

发表于 2005-5-1 10:06:13 | 显示全部楼层
支持~
回复

使用道具 举报

发表于 2005-5-1 11:23:57 | 显示全部楼层
可惜我太菜
只能精神支持了
正在学习ing
回复

使用道具 举报

 楼主| 发表于 2005-5-1 11:49:21 | 显示全部楼层
QuickDown用例分析
1.        QuickDown下载过程用例分析:
a)        用户选取一个URL,添加到QuickDown中
b)        QD为该URL建立一个下载对象DownObj
c)        DownObj为该任务做如下序列化工作:
i.        建立数据库项目,用于记录任务的当前状态
ii.        建立一个线程,向下载服务器得到下载文件的属性信息,成功得到文件信息后,把文件属性信息通知UI,并更新数据库,然后启动第二个下载线程,开始本线程的下载工作
iii.        下载线程二试图连接服务器,并判断服务器是否支持多线程下载,如连接成功,则启动余下的所有线程(需启动几个线程要看用户的选择)
iv.        根据文件大小和下载线程的数目,决定每个线程需要下载的文件范围
v.        某个线程做完本线程的下载任务后,向后搜索,看是否有线程没有连接上,如果有,移动下载点,继续下载其它范围的文件数据
d)        系统中的数据库类是一个全局对象,所有下载任务直接和它通讯,定期更新数据库中相关记录的信息
e)        每个下载任务有一个文件操作对象,用户向下载文件中写入数据,它提供互斥操作,以便顺序地把下载数据写入文件。
f)        文件下载完毕,更新数据库,通知UI
g)        UI定期查看数据库,刷新界面显示
注:如果用户中途停止下载,并更改下载的线程数,通过一定的算法,重新分配各线程下载的范围
回复

使用道具 举报

发表于 2005-5-1 12:26:57 | 显示全部楼层
e)中的互斥好象没有必要,各写各的,并且lseek支持文件空洞存在。
下载过程中的进度条显示呢?!
任务的控制好象不是很清楚!
下载之前需要尝试连接并获得信息,比如是否支持断点续传,支持passive和active哪种方式!支持目录浏览!
回复

使用道具 举报

 楼主| 发表于 2005-5-1 12:32:08 | 显示全部楼层
[quote:71d8286f7c="小锁"]e)中的互斥好象没有必要,各写各的,并且lseek支持文件空洞存在。
下载过程中的进度条显示呢?!
任务的控制好象不是很清楚!
下载之前需要尝试连接并获得信息,比如是否支持断点续传,支持passive和active哪种方式!支持目录浏览![/quote]

下载进度条是UI设计实现过程中的细节,我想不需要在这里写出来吧,呵呵;互斥是没必要,不好意思。
我在下载之前本来就已经得到了连接信息,只是不需要在分析用例中写出来而已!
回复

使用道具 举报

发表于 2005-5-1 13:30:55 | 显示全部楼层
置顶,有兴趣大家一起讨论。希望发扬自由精神,相互尊重。
回复

使用道具 举报

发表于 2005-5-1 17:14:23 | 显示全部楼层
恩……虽然置顶了,但还是要顶!

回复

使用道具 举报

 楼主| 发表于 2005-5-1 17:30:12 | 显示全部楼层
在写做类分析,希望有个中高手可以帮忙设计这个东西。

节后又要忙了,没时间,所有最好现在可以有人和我一起来做设计工作!

过2天,我会把UML图及设计文档发出来,大家讨论一下。


谢谢!
回复

使用道具 举报

发表于 2005-5-1 18:32:01 | 显示全部楼层
好好搞吧,我可以借鉴一下,
回复

使用道具 举报

发表于 2005-5-1 20:42:37 | 显示全部楼层
偶用d4x 如果想写的话  也会直接修改d4x的界面来实现
回复

使用道具 举报

发表于 2005-5-1 21:36:36 | 显示全部楼层
d4x不是GPL,你要修改需作者同意,况且代码写得实在不敢恭维!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 03:42 , Processed in 0.042573 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表