现在的位置: 首页 > 综合 > 正文

转-全球最小的一款P2P软件- eMuleBT软件框架分析

2013年08月17日 ⁄ 综合 ⁄ 共 2328字 ⁄ 字号 评论关闭
 

 

eMuleBT是一款开源的软件项目(www.emulebt.com),俗称“变态驴”。因为同时集成了eMuleBT的功能,容量仅为460K,从而引起了一些人的注意。因为对eMuleBT的功能比较感兴趣的人也确实不少,所以小记也花了不少工夫请专业人士对其进行了分析,现对其表叙如下,以飨读者。

 

    eMuleBT是完全安装C++的思想来写的一款软件,这样他的类封装是比较好的,从整个软件构架上来说,就显得特别清晰了。

 

软件框架:

 

     eMuleBT分为两个框架,一个是UI,也就是用户操作界面,一个是内核,也就是实现eMule协议,BT协议通讯的核心部分。

 

UI部分是我们用户看到了比如“传输”,“搜索”,“共享”等操作界面,内核是我们通过UI来操作的,比如我们通过界面操作新加一个下载任务,任务在我们的UI上表现出来,其实是由内核来驱动的。

 

 

1 eMuleBTUI

 

 

 

为什么要分开呢?从大量的实际软件开发过程中来说,我们经常碰到对软件界面的需求改变,而实际的功能却不需要发生大的改变。很常见的例子是A公司需要的是一款针对娱乐用户的产品,而B公司需要的是一款针对企业用户的产品。 但两者的共同需要是要下载这些文件。这样的结构有利于:

 

1)  分工合作,可以适合项目人员各司其职;

 

2)  结构清晰,有利于软件后期维护;

 

3)  模块化设计,有利于软件扩充;

 

4)  分开实现,有利于软件各部分移植

 

结构图如下:

 

 

 

 

 

 

界面部分相对简单一些,我们先说说核心部分

 

 

 

核心的结构我们用以张图来表示是比较清楚的:

 

 

 

 

eMuleBT目前只对eMuleBT的核心做了比较好的封装,而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系统下很多工作都是单步执行的,比如实现一个dnsIp地址转换的过程,这种操作是比较耗软件资源的,如果使用线程来做会稍微改善一下这种局面,当然也还有更好的方法,但emulebt看来还没有使用另外的方法。

 

Cache类:在p2p软件互相传输数据的时候,必定会对硬盘进行非常频繁的读写操作,而好的软件一定需要减少这种操作模式,emulebt也不例外,为了保护好硬盘,程序做了cache类,把常用数据放在了内存里面,读写既减少了磁盘操作次数,还提高了效率。

 

共享类: emulebt的共享机制不太一样,因而在共享类下面,eMuleBt又分出了emule的共享类和bt的共享类。Emule的共享是9m一个块的共享,而且他的共享还必须把hash值发到ed2k server上去(当然kad是另一种实现方式),而bt是由torrent文件决定了分块的大小和hash值。弄清楚这点后,也就明白了为什么共享类为什么要线程类了。Emule会把下载的完整包再提交给ed2k server,同时在UI里面对共享的内容负责显示。

 

任务类:是一个比较常用的类,emulebt对下载上传都看成一个任务,用户在操作界面对下载的停止,开始,排序都是对任务的操作。任务类和文件类之间联系的也是比较紧密的。

 

文件类:文件类是对文件操作的一个类,emulebt都对这个类为基础实现了文件的操作,他封装了ntfs,fat等不同的文件系统的操作模式。

 

还有比较多的东西没有介绍完,比如emule类和bt类的内部细节,比如她的socket类都是我们感兴趣的….用户如果有兴趣,可以到eMuleBT官方网站(www.emulebt.com)上下载最新的版本测试:

 

我们将继续对这款软件进行分析

 

 

 

--小陈

 

 

 

 

抱歉!评论已关闭.