扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:读报 来源:中关村在线 2009年12月7日
关键字: VeryCD电驴
软件框架:
eMuleBT分为两个框架,一个是UI,也就是用户操作界面,一个是内核,也就是实现eMule协议,BT协议通讯的核心部分。
UI部分是我们用户看到了比如“传输”,“搜索”,“共享”等操作界面,内核是我们通过UI来操作的,比如我们通过界面操作新加一个下载任务,任务在我们的UI上表现出来,其实是由内核来驱动的。
为什么要分开呢?从大量的实际软件开发过程中来说,我们经常碰到对软件界面的需求改变,而实际的功能却不需要发生大的改变。很常见的例子是A公司需要的是一款针对娱乐用户的产品,而B公司需要的是一款针对企业用户的产品。但两者的共同需要是要下载这些文件。这样的结构有利于:
1) 分工合作,可以适合项目人员各司其职;
2) 结构清晰,有利于软件后期维护;
3) 模块化设计,有利于软件扩充;
4) 分开实现,有利于软件各部分移植
结构图如下:
界面部分相对简单一些,我们先说说核心部分,核心的结构我们用以张图来表示是比较清楚的:
eMuleBT目前只对eMule和BT的核心做了比较好的封装,而http协议只是做个简单的封装,比如对BT种子的下载他用的就是自己的http类。
我们对整个emulebt进行了分析,大致可以把他的系统结构分成罗列成上面的平面组图关系。
现在我们分别介绍一下:
BT内核:是对BT协议进行封装的一个类结构,比如握手,请求包等协议交互的总结构,而BT协议需要对文件操作的时候,就会使用公共的文件类来操作。
eMule内核:是对emule进行封装的一个类结构,比如和服务器的通讯,请求。而为了下载减少磁盘的损耗而使用了cache技术,就会用到cache类来操作。
Http内核:从技术上来分析,emulebt也有给http,ftp,mms,rtsp,p2s留有开发接口的,但实际只是预留了程序接口规范,并没有代码化,其中原因不得而知。回调类:eMuleBT的代码在开发的时候,估计是由两部分人员完成的,一部分是UI部分,一部分是由内核部分。在内核部分留有大量的回调入口,这样比较方便UI用户在开发的时候进行扩展,我们经常遇到文件下载完成的时候,我们操作界面需要对文件进行其它的操作,比如移动,播放等等。而预留的回调入口就显的非常有用了。
配置类:eMuleBT使用的是单执行文件的发行模式,她所有的默认配置全部都是由程序第一次运行的时候产生的。生成的配置文件会右配置类来支配给内核,比如同时连接数,最大,最下的下载速度等等。
Emulebt支持多语言版本,在lang目录下会产生两个标准的语言版本,一个是英语版本,一个是简体中文版本。按照这两个标准版本就可以改写出其它的语言版本。
状态类:状态类是对软件的执行的状态进行检测和显示的类,比如下载的文件数量,字节数量,上传的数量,表现如下:
定时器类:主要用户软件内需要定时更新或操作的事务管理类,它下辖的有UPNP
类,线程类,和host类.
p2p技术里面经常把UPNP用来实现tcp直传的一种技术,但不同的设备有细小的差别,而且不同的设备支持的方法还不太一样,在软件启动的过程中,为了节约系统开销和同步,所以使用了定时器类来实现uPNP的寻址和交互。
有经验的软件开发者都知道,在windows系统下很多工作都是单步执行的,比如实现一个dns到Ip地址转换的过程,这种操作是比较耗软件资源的,如果使用线程来做会稍微改善一下这种局面,当然也还有更好的方法,但em还提高了效率。
共享类: emule和bt的共享机制不太一样,因而在共享类下面,eMuleBt又分出了emule的共享类和bt的共享类。Emule的共享是9m一个块的共享,而且他的共享还必须把hash值发到ed2k server上去(当然kad是另一种实现方式),而bt是由torrent文件决定了分块的大小和hash值。弄清楚这点后,也就明白了为什么共享类为什么要线程类了。Emule会把下载的完整包再提交给ed2k server,同时在UI里面对共享的内容负责显示。
任务类:是一个比较常用的类,emulebt对下载上传都看成一个任务,用户在操作界面对下载的停止,开始,排序都是对任务的操作。任务类和文件类之间联系的也是比较紧密的。
文件类:文件类是对文件操作的一个类,emule和bt都对这个类为基础实现了文件的操作,他封装了ntfs,fat等不同的文件系统的操作模式。
还有比较多的东西没有介绍完,我们将继续对这款软件进行分析。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者