QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1626|回复: 6

[记录]关于开发一个下载工具

[复制链接]
发表于 2004-11-29 21:02:00 | 显示全部楼层 |阅读模式
2004年11月29日,开始和dalin、寂寞空山语、蓝爷爷(是他自封的 )等在公社的qq群里讨论写一个新的下载软件的事,现在陆续把一些整理后的讨论记录贴上来,一是做个记录,二也是想在论坛里和大家讨论,不过这个帖子专门用来贴讨论记录,所以请大家到这个帖子里来讨论:
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=95695&start=0&postdays=0&postorder=asc&highlight=


——————————————————————————————————

做一个基于www和ftp(包括需要验证的ftp)等已有协议的用来从服务器上获取数据的软件


1.将网络地层的通信和协议分开,或者说以后可以通过插件机制添加对新协议的支持
2.多线程,多镜像,多任务,支持断点续传
3.同时具有字符界面和图形界面,这里的字符界面包括命令行和简单的图形界面(不依赖xwindow)两种
4.任务和文件管理(能保存下载数据)(用数据库来保存数据)(对于已下载的文件,最好能够把在下载时的注释和下载时间等信息放到GNOME和KDE的文件浏览器中显示 )
5.对任务的高度可控制,比如可以允许插件对当前的任务进行一些操作
6.插件机制,尽量做到可扩展性(支持用脚本语言写的插件和动态连接库形式的插件,写的脚本如果出色的话,可以吸收到软件中来,直接作为软件的一部分了)
插件的功能:
6.1.添加对新协议的支持
6.2.对任务和文件的控制
7.国际化(用文本文件的tar.bz2包做语言包,这样不用重新编译,一般也可以很方便地翻译软件了 )(? gettext体系的翻译已经很方便了 ?)
8.最好把后端功能和前端的界面部分分离,这样就不用和某个GUI开发库连锁在一起了
补充:和其他进程通信以进行配合的能力(还可以用shell编程来使用下载软件)


Net Transport 的特性是个很好的范例






最好把软件工程的开发流程等等先掌握了
以现有的GPL下载软件分为基础支出来,直接从现有软件的基础上起步,否则等我们开发出一个实用的软件出来,人家的功能早就不知道进步多少了
从prozilla的基础上来进行,因为它确实写的不错,prozilla的代码也不算多
可以一点一点地实现,但是一开始的框架要考虑好
建议一开始不做GUI只做功能~
? 它的ftp算法来自wget  ?
? 等我们有一定的水平之后再来做这个也不迟,比如做uftp的linux客户端  ?
发表于 2004-11-30 00:54:17 | 显示全部楼层
支持,我是我以前想写的。
回复

使用道具 举报

 楼主| 发表于 2004-11-30 10:42:21 | 显示全部楼层
1.用插件实现网络协议,把一个网络协议的相关操作封装到一个动态连接库里,然后按照面向对象的思想来使用这个动态连接库,当然如果直

接封装到一个类里再放到连接库里就不用这样了,但是会给C的使用者带来麻烦。一个协议对象有一些特定于协议的操作(成员函数),但是外

界对这些操作一无所知,只是通过预先约定好的一系列API来使用协议对象。
2.提供API给插件,使得插件能够访问任务队列等重要的数据结构,并且能做出一些被允许的操作。任务的很多功能都通过插件来实现,比如定

时的任务(或者可以称为计划任务,cron)可以通过插件来实现。
3.能够将一些命令通过管道等进程间通信机制送给下载软件的命令解析器,命令即可以是字符串(供用户在命令行界面上使用,可以在下载软

件里实现一个简单的shell,像grub那样提供一个操作环境),也可以是二进制数据(主要的理由是可能可以提高性能,不过还未严密分析)。

甚至,可以把下载软件做成两层:服务器和客户端:服务器只负责功能部分,但不负责用户交互;客户端可以是图形界面的,也可以是字符界

面的shell。
C/S结构的好处是别人自己的软件里也可以集成入下载软件的frontend,也可以和下载软件协同工作。
4.        |->server & (client or frontend)
底层开发库|->frontend  
就是先做个开发库,一个简单的fontend用于测试
然后C/S架构也好其他架构也好都可以实现了
先把开发库和简单的测试用frontend做出来,其他的可以以后再说
5.需要的模块:
网络管理-》封装网络操作,负责网络数据通信
任务管理-》管理任务(等待下载的、正在下载的、已经完成下载的;注意和文件管理是不一样的;另外对任务的分类信息放在数据库里,对文

件的分类则依靠文件系统里的树形目录)
文件管理-》管理文件
插件管理-》插件的载入、使用时的访问、卸载等
命令管理 -》解析命令,用命令来控制软件,访问一些数据结构,执行一些操作等
数据管理 -》封装数据库操作,当然如果数据库是基于文件的,那么也会用到文件管理模块
也许还需要另一个模块来统筹调度所有这些模块……
当然开发库里可以只是一个个独立的模块,然后开发个软件来使用它们来组成一个下载软件
6.UI和功能是分开的
7.其实配置文件的作用无非就是两个:给一些状态变量赋值,执行一些操作。其实就是:操作变量和调用函数
所以完全可以用一个文本文件保存一系列命令,然后送入命令解析器就可以了……
配置文件不也就是个脚本嘛~
回复

使用道具 举报

发表于 2004-11-30 14:43:22 | 显示全部楼层
这里有一篇文章不错, 希望你用得上

"Classloading in C++:Bringing classloading into the 21st century"

http://s11n.net/papers/classloading_cpp.html#SECTION00026000000000000000
回复

使用道具 举报

发表于 2004-11-30 15:12:24 | 显示全部楼层
说的好深奥呀,我觉得只是一个下载工具,还是弄成一个整体比较好,不要分服务器端和客户端,不然,普及起来很难呀,网季快车只所以很普及,就是因为它很“简单”,我觉得应该做一个核心,然后任何GUI都使用这个核心,如何?就好像mozilla,不要做成mysql那样,服务器端和客户端,不然,不好普及,到时连高手都懒的使用就不好了。     
再说了,我觉得kget再加上多线程下载就好了。
回复

使用道具 举报

 楼主| 发表于 2004-11-30 20:14:59 | 显示全部楼层
呵呵,C/S的目的就是能让其他软件也能用上这个下载软件的功能,但是如果那些软件只是把下载软件的代码集成进来,那么当它们同时运行时就等于同时运行了多个下载软件,这样就不合算了~
回复

使用道具 举报

发表于 2004-12-1 18:28:10 | 显示全部楼层
也对呀,不过.........操作方面一定要和kget一样简单才好。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-6 23:39 , Processed in 0.048519 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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