QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: snow_insky

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

[复制链接]
发表于 2005-5-1 22:31:11 | 显示全部楼层
关于如何保存下载的信息:我觉得还是不要直接就使用 数据库,加个 abstract layer 比较好些吧,这样你可以使用 普通文件 来保存


另一方面,如果楼主真想写的话,有没有研究过现有品种繁多的下载工具呢? 我觉得没有必要一切都从头写起,至少下载核心算法可以考虑使用 prozilla 或 wget
回复

使用道具 举报

发表于 2005-5-2 00:55:32 | 显示全部楼层
wget 是单线程的,prozilla是下完后再合并。
关于下载信息的保存,可以直接放在现在的文件中啊
比如下载get.tgz,本地暂时保存为get.tgz.mg!,如果中途退出,信息保存于文件尾部,全部下完后,再截断不久解决了吗?!
目前的问题是>=4G的文件要不要支持呢?!
DVD现在还是不怎么流行,但是也应该考虑啊,这样文件的长度用unsigned long是不够的,改用double,我现在用的就是double,今天也就写完了url类,不过还有些小问题,需要主意的细节还是很多的。
回复

使用道具 举报

 楼主| 发表于 2005-5-2 13:40:06 | 显示全部楼层
[quote:c5f14551a4="liuspider"]关于如何保存下载的信息:我觉得还是不要直接就使用 数据库,加个 abstract layer 比较好些吧,这样你可以使用 普通文件 来保存


另一方面,如果楼主真想写的话,有没有研究过现有品种繁多的下载工具呢? 我觉得没有必要一切都从头写起,至少下载核心算法可以考虑使用 prozilla 或 wget[/quote]

呵呵,谢谢你的建议!
我的想法是这样的:我们自己写一个数据库操作类系,它并不依赖于任何数据库,而只是在一个按我们自定义格式保存的一个文件!

FlashGet也是这样做的。

还要好好谢谢其他朋友的支持,意见!我的设计参考了当前Windows下流行的下载工具的实现。
在真正到了编码阶段时,我会参考Linux几种下载工具实现的实现算法。

还希望大家继续支持,我会努力的!

更希望有人可以和我一起做。特别是有设计经验的朋友!可以在我把UML发出来之后,对它进行修改!
回复

使用道具 举报

发表于 2005-5-2 13:56:39 | 显示全部楼层
用什么工具做uml?
回复

使用道具 举报

 楼主| 发表于 2005-5-4 13:44:02 | 显示全部楼层
一直在修改中...,这两天同学过来,所以耽误了点,让大家久等了!
明天就出来
回复

使用道具 举报

发表于 2005-5-4 15:18:52 | 显示全部楼层
基本的类终于写个差不多了,估计这两天就能出来简单的字符界面的下载,继承了wget的类似界面。
哈哈!
回复

使用道具 举报

发表于 2005-5-7 01:31:32 | 显示全部楼层
提供参考:
http://www.linuxfans.org/nuke/modules.php?name=Site_Downloads&op=geninfo&did=3499
http://sourceforge.net/projects/dfast
回复

使用道具 举报

发表于 2005-5-7 02:35:21 | 显示全部楼层
fdl不能这么说啊,每个人都有不同的目的,我写下载软件主要就是为了练习一下写软件而已,并且想做点什么东西出来给大家用,现在linux下的多线程现在软件确实没有让人十分满意的,所以就要写啊,向你说的wxDownload,他依赖的那个库wxwindows我才不想装呢,所以我们需要一个简洁的高效的,基本上没有什么依赖性的软件,并且如果想全部控制自己的程序,就需要从比较低的层次入手。如果用脚本python和perl都可以简单的实现这种工具吧。至于GPL精神,仁者见仁,智者见智,我觉得这就是GPL精神。话说来,即使以什么东西作为参照的话也会以wget,prozilla等比较知名的软件。哈哈,那个软件不是有人维护嘛?中文也有人做,足够了。
BTW:我的myget的文字界面已经基本成型,就还剩下ftp目录下载没有完成了,等做完了,释出来大家测试核心代码。
回复

使用道具 举报

发表于 2005-5-7 04:09:56 | 显示全部楼层
小锁,
if you want practice, I'd suggest do something no one else have done. As far as I am concerned, I really do not think it is much reasonable to start a new download app: there are a lot out there, and I am sure you can find one which fulfill your basic requirements and try to join it to improve it.

When you release myget, why the users want to give it a try, when wget/prozilla is mature/stable. Of course, you may add more features in the future, but currently I can not see much differences between it and the well known "giants". My point is that, if you want to start a new project which has a lot of similar existing projects, the new one has to have some distinguish characteristics which the others do not possess. (If I was wrong, your download app has some features missing in other downloaders, then please correct me)

For practice, I'd recommand some softwares which are required by chinese users but currently no projects have been started.

Just my thoughts...
回复

使用道具 举报

发表于 2005-5-7 09:08:31 | 显示全部楼层
楼上的wxWindows的卫道者。你到这儿宣传wxWindows要给我广告费啊。   
回复

使用道具 举报

发表于 2005-5-7 10:00:57 | 显示全部楼层
我的言辞过于激烈,对小锁表示歉意。
对库的看法严重赞同版主的看法,wx比较小,在Win下也可用,是一个优秀的图形库。
祝小锁开发顺利。

PS:
版主:dfast的中文包有么?
回复

使用道具 举报

发表于 2005-5-8 18:59:45 | 显示全部楼层
哈哈,没什么,我也有点激动吧也许!
myget的文字界面已经出来了,大家测试一下吧!
http://www.linuxfans.org/nuke/modules.php?name=Site_Downloads&op=geninfo&did=3537
回复

使用道具 举报

 楼主| 发表于 2005-5-9 00:01:32 | 显示全部楼层
一直在学习UML.....,现在把软件系统的主要框架,发出来,看看,本来想画出UML图,但是发觉不必要了,所以就这样,我现在正在设计Linux下的一个Socket接口层(也就是如Windows一般,把关于HTTP,FTP等协议的操作进行封装,是我们在写实际应用时可以省去好多麻烦),过几天,我把类的整体构架发出来。

QuickDown需求设计说明书
——Linux下载软件设计
软件概述
目前Linux在全世界都被广泛的应用,在中国也有越来越多的人开始抛弃Windows了(虽然Windows对一般人来说也和Linux一样——免费,呵呵),Linux在易用性,中文支持等方面都得到了很大的提高,但是对于一个诞生于网络的操作系统来说,它有一个可悲的地方,那就是没有象Windows下那样有各式各样的下载软件,特别是多线程下载软件(Wget,Kget都不是)。
本软件就是为了填补Linux下优秀下载软件的空缺,让更多的人可以来使用Linux,让Linux更加适应高速发展的网络下载需求。
QuickDown的主要特性
1.        支持断点续传
2.        支持多线程下载
3.        良好的可扩展性,可以容易地向其中加入其它协议的下载代码
4.        优秀的用户界面(目标是类似FlashGet)


QuickDown需要的技术支持
1.        为了支持断点续传,需要有数据库的支持,以便记录每个下载文件当前的状态,在下次重新下载时,可以恢复上次下载的状态。
2.        为了支持高效的多线程下载,必须包装一个线程管理的Class,用于每个下载任务的线程管理工作。
3.        为了可以让实现下载任务的程序更通用,各协议间代码、接口的定义更统一,必须实现一个协议管理模块,该模块相当于提供了一个统一的接口,并且很容易扩展。
4.        用户界面可以用Qt实现,如果我们用C++实现整个系统的话,用Qt实现我们的UI将是最好的选择。

QuickDown用例分析
用例1:下载任务管理
主要参与者:下载用户
项目相关人员及其兴趣:
        下载用户:希望能够快速而完整地把目标文件下载到本地;并且可以在下载过程中,暂停、继续以及删除下载任务
        某个远程服务器:提供用户下载的原文件,并支持通过某种协议为用户提供下载服务
前置条件:用户获得了需要下载文件的URL
后置条件:用户在本地磁盘上得到了一个完整的目标文件
主要成功场景:
1.        用户从其它地方获得了一个目标文件的URL
2.        用户把得到的URL输入软件系统
3.        系统在数据库中为用户输入的URL添加一个新的下载项,并显示在界面上,以便于用户管理
4.        系统以数据库中的记录项为初始值,建立一个下载对象
5.        系统创建第一个下载线程,该线程与下载服务器创建socket连接,并获取服务器信息和目标文件信息,并用这些信息更新数据库,然后开始下载工作
6.        系统创建下一个线程,开始下载工作

系统重复第6步,创建完所有线程,各线程开始独立工作

7.        下载完毕,更新下载数据库,保存关闭下载文件
替代流程:
*a. 任何时刻,都需要在用户界面上显示相应的提示信息
*b. 任何时刻,用户要暂停下载任务:
1.更新数据库信息
2.系统停止任务的下载
*c. 任何时刻,用户重新开始任务下载
1.系统读取数据库中相应的任务记录
2.根据读取到信息重新建立下载对象,开始任务的下载
*d. 用户删除下载任务
1.停止任务下载
2.删除下载对象
3.删除数据库信息
2.如果用户输入的URL无效或该URL是系统不支持的协议
1.显示指示错误并拒绝输入
3.在数据库中添加记录项失败:
   1.显示提示信息,并拒绝下载
4a. 用户对该下载任务设置的是手动下载或计划下载:
   1.系统不再为该任务做任何动作,而是等待下载计划时间用户手动操作
5a. 第一个线程与服务器建立连接失败
1.        重试
2.        重试次数达到某个值后,返回错误,停止下载任务
5b. 获取的服务器信息说明该服务器不支持多线程下载
1.不创建余下的线程
6a. 只有当前线程和服务器连接成功,才创建后一个线程(该策略可以更改)


用例2:设置任务下载属性
主要参与者:下载用户
项目相关人员及其兴趣:
        下载用户:可以方便地设置任何一个下载中或待下载任务的下载属性,当任务开始下载时,设置的属性就可以立即生效
前置条件:被设置的任务必须是暂停状态(待下载状态);如果要设置正在下载任务的属性,必须先暂停该任务
后置条件:当任务开始下载时(或重新开始下载时),
主要成功场景:
1.        用户选择一个目标任务,进入该任务的属性设置页
2.        在属性设置页进行设置
3.        关闭属性设置页
4.        开始下载
替代流程:
1a. 该任务处于下载状态:
1.        暂停目标任务
2.        设置属性
3.        重新开始下载

用例3:设置系统全局属性
用例4:GUI完善,完成统一的菜单操作
回复

使用道具 举报

发表于 2005-5-11 16:48:35 | 显示全部楼层
小锁, 你看过d4x的代码么? 它里面的流量控制是怎么做的?
回复

使用道具 举报

发表于 2005-5-11 20:44:10 | 显示全部楼层
啊哈,现在还有人要流量控制?流量控制了还多线程?
哈哈,流量控制还是相对简单的,就是该从缓冲区读不读,根据网络速度睡眠一段时间在读缓冲,这样就能控制流量了。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-6 03:40 , Processed in 0.034270 second(s), 12 queries .

© 2021 Powered by Discuz! X3.5.

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