开篇:润墨网以专业的文秘视角,为您筛选了一篇利用P2P下载工具实现离线下载服务范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
【摘要】当用户使用普通下载工具下载大的资源文件或者冷门资源时,常常要等待一天甚至更长时间才能完成,下载时需要长时间地占用用户的电脑资源和网络资源,用户不能关闭下载工具和个人机器。而离线下载是利用服务器“代”用户进行下载,待服务端下载完成后,用户再用下载工具将资源从服务器取到自己本机,具备无需挂机等待、高速的特点。本文所述的是利用成熟的p2p下载工具BitComet、eMule进行二次开发,对用户提供离线下载服务的方法,该方法同时支持HTTP、BT、ED2K、MAGNET多种下载方式。而且在服务端可以分布运行多个P2P下载工具,以满足客户端的大量用户下载请求,下载任务在各个下载引擎上的分配由服务端统一调度管理。
【关键词】离线下载;p2p;BT;ED2K;下载任务管理;下载引擎
1.引言
在传统下载方式中,一般是把文件由服务器端传送到客户端,例如FTP,HTTP等等。由于是从一台服务器下载,服务器所提供的带宽是一定的,因而下载人越多速度越慢。但是这样就出现了一个问题,随着用户的增多,对带宽的要求也随之增多,用户过多就会造成瓶颈,而且搞不好还会把服务器挂掉,所以很多的服务器会都有用户人数的限制,这样即使你使用的是宽带网,通常也很难达到运营商许诺的最高下载速度,这里面固然有网络的原因,但与服务器的限制也不无关系。
随着P2P技术的出现,用户可以充分利用网络带宽,人可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载,改变互联网现在的以大网站为中心的状态、重返”非中心化”,并把权力交还给用户。目前常用的P2P工具有支持BitTorrent协议的比特彗星BitComet,支持ED2K协议的电骡eMule。
但用户使用P2P工具下载电影、游戏大型资源,或者冷门资源时,用户就得下很久,有时需要花费几天的时间,期间用户必须长期挂机以保证下载任务的不中断,给用户的设备使用带来了很多不便和限制。
我们在此依托成熟的工具和技术,实现了一种离线下载的服务方案。将比特彗星BitComet和电骡eMule运行在服务端,用户通过web页面向服务端提交下载请求,服务端接受情况后,会根据下载请求的类型,分布将请求加载到这些P2P工具的中,生成下载任务,由这些工具在服务端利用高速的带宽进行下载,或者由服务器挂机“代”用户下载冷门资源。而用户的设备在成果提交完下载任务请求后,就可断开网络或者关机。用户可以随时访问离线下载的服务页面,查询自己要求资源的下载进度,当看到下载完成后,就可以一次性地取回下载文件,完成下载过程。
我们提供的离线下载服务,是帮助用户提供了一个下载,用户只需提交下载请求,由我们的下载保持在线,帮助用户完成下载任务。而这些的实现,我们使用的是比特彗星、电骡这样的成熟稳定工具,避免了完全从P2P底层协议进行开发,同时可以更好地利用网络中的已有资源点。
2.技术方案原理及实现
离线下载原理如下:
(1)用户通过Web页面提交一个下载请求。
(2)服务端的下载任务管理器接收到请求后,首先查询提交的下载链接是否被下载过。如果已下载过,直接把已下载的资源文件复制到服务器上用户的个人储存空间;如果没有,就将用户的下载请求转发到一个下载引擎模块。
(3)每个下载引擎模块管理着一个BitComet和eMule下载工具,下载引擎判断下载任务类型,如果是BT下载,则通过BitComet的http管理接口,将任务添加到BitComet的下载任务中,并开始下载;如果是ED2K下载,则通过eMule的http管理接口,将任务添加到eMule的下载任务中,并开始下载。
(4)BitComet和eMule下载工具执行下载任务,并由下载引擎模块通过他们的http管理接口查询下载进度。
(5)下载完成后,用户在Web页面上可以查询到下载进度已为100%,用户可以通过工具从本人的存储空间一次性取回自己的文件。
系统采用典型的分层架构,为了信息隐匿的需要,要求每一层只能调用其下一层的接口。每层都根据业务需求提供最低限度的接口,保证层次之间的依赖仅仅停留在接口级别。系统结构如图1。
离线下载系统包括:用户离线下载Portal页面、下载任务管理模块、下载引擎模块、文件管理模块。
2.1 离线下载Portal页面
对用户以WEB页面的方式提供离线下载功能使用。用户离线下载Portal页面通过调用下载任务管理模块的下载管理接口提供给用户添加、删除、暂停、启动下载任务及强制重新下载的功能。其中,强制重新下载的使用场景为,有可能系统下载历史中的某一文件特征码对应的文件已经不合实际,用户根据系统下载历史所获取的文件并非用户所需要的文件,则用户可使用强制重新下载功能,让系统删除该文件特征码对应的下载文件并重新下载。
用户离线下载Portal网站可通过查询数据库获取用户的已完成下载任务及下载历史。Protal网站需要分为正在下载任务列表及已完成下载列表两个界面,正在下载任务列表中的任务清单及状态是通过下载任务管理模块的查询接口中返回;而已完成下载列表的数据则通过查询数据库表获取。
2.2 下载任务管理模
下载任务管理模块通过读取数据库中的配置信息,以获取各下载引擎模块的信息。
下载任务管理模块以HTTP+JSON方式提供给用户离线下载Portal页面调用,用于提供网站查询用户的下载任务列表、添加用户下载任务、删除用户下载任务、暂停用户下载任务、启动用户下载任务、强制重新下载。其中强制重新下载时,系统删除该文件特征码对应的下载文件并重新下载。
下载任务管理模块通过定时调用各下载引擎的查询下载任务接口,以获取最新的下载任务状态,并更新系统任务列表。对于下载完成的任务,需要将下载文件移动到系统备份空间,并复制到相应用户的个人存储空间上。下载完成后,还需要通知下载引擎删除该完成的任务。
2.3 下载引擎模块
下载引擎模块第三方下载工具(BitComet及eMule)的下载控制操作,屏蔽各种下载工具的差异。根据配置信息,初始化本机上的第三方下载工具接口。
下载引擎模块以HTTP+JSON方式提供文件下载接口给下载任务管理模块调用,用于提供下载任务管理模块获取下载引擎节点上的下载任务列表、添加下载任务、删除下载任务、暂停下载任务、启动下载任务。
下载引擎模块需要增加消息队列以保证发向下载工具的操作是单线程操作,以确保操作顺序。
下载引擎模块对BitComet工具进行远程暂停、删除、启动操作之前,需要先做一次获取BitComet下载列表的操作,并根据特征码找出BitComet的taskid,再进行暂停、删除、启动操作。
2.4 文件管理模块
离线下载的文件往往是较大的文件,如果通过网络连接来进行频繁的复制、移动操作将影响网络带宽及操作时间过长。
文件管理模块则在文件服务器上的一个应用模块,用于接受下载任务管理模块发出的下载文件复制、移动、删除操作,并最终于文件服务器上,通过外调操作系统命令进行文件的复制、移动及删除。经过测试,直接使用外调操作系统命令进行大文件的复制速度是最快的,比使用NIO或管道等方式都快。
参考代码如下:
String cmd1 = “cmd /c copy \”” + srcFile + “\” \”” + trgFile + “\””;
Process p_tar1 = Runtime.getRuntime().exec( cmd1 );
p_tar1.waitFor();
System.out.println( “exit Value=” + p_tar1.exitValue() );//获取命令返回结果,例如:0成功,非0失败
BufferedInputStream bis = new BufferedInputStream( p_tar1.getInputStream() );//获取命令执行结果的输出信息
bis = new BufferedInputStream ( p_tar1.getErrorStream() );//获取命令执行结果的异常信息
3.关键用例
离线下载系统中添加下载任务和删除下载任务的活动图分别如图2和图3。
4.离线下载的应用
基于该种设计方案的离线下载系统,已经在北京联通宽带业务中心上线试运行。该系统充分利用了北京联通宽带业务中心的网络带宽优势,通过在多台服务上部署多个下载引擎,每个引擎各管理一套BitComet和eMule的方法,以满足公网上大用户量的下载任务请求。实用中表明,对于一些冷门资源,文件大小虽然只有600M,但完成下载所需的时间却是57小时34分钟,下载完成后取回到用户本地只需要10多分钟。通过离线下载系统大大提高了用户的下载效率。
5.结语
本文所设计的离线下载方案,避免了完全从P2P底层协议开发或者掌握庞大的P2P开源代码工程,利用成熟的P2P下载工具,通过分析这些工具的外部管理接口,而达到向工具中加载下载任务,启动、暂停等控制下载任务,提供一种快速实现的离线下载服务。并且依靠成熟工具的稳定性来保障了服务的稳定性。通过离线下载服务,提高了用户下载的效率,释放了本地设备的使用,充分利用了服务端的带宽资源和设备资源。随着系统商业度的提供,将会为服务提供商带来良好的经济效益。
参考文献
[1]茹林.P2P网络中多线程下载的研究[Z].大连海事大学,2009.
[2]林泓,何巍.利用JXTA平台实现P2P服务的研究[J].武汉理工大学学报(信息与管理工程版),2005(02).