多人协作下载模式的设计

2013-04-29 17:57连楠楠张偲钮亮
中外企业家 2013年6期
关键词:多线程

连楠楠 张偲 钮亮

摘要:下载是网络应用中最重要的组成部分,而即使在下载技术相对成熟的今天,还是有很多情况不能达到满带宽负荷地下载资源,本文设计的多人协作下栽模式,在多线程下栽的基础上,应用多用户同时提取资源的部分数据,再整合至传输速度快的服务器,实现快速下载的目的。

关键词:多线程;文件传输;下载

中图分类号:C931 文献标志码:A 文章编号:1000-8772(2013)15-0208-03

1.引言

中国互联网规模与日俱增,越来越多的人开始使用互联网,而在使用互联网时,最重要的一个概念就是下载。下载的速度、占资源量和稳定性一直被作为下载方式好坏的最重要的评估。目前的下载方式有HTTP方式,FTP方式,ED2K方式,BT方式,迅雷下载等。其中,FTP下载是最原始也最简单的下载方式,服务器离客户机的距离越近,下载人数越少,下载速度就越快,BT下载是现在最流行的P2P下载模式,利用用户之间的相互传输来下载所需文件,下载的人数越多,上传给其他用户的也就越多,下载速度也就越快。由此可见,较近服务器上的,下载人数较少的文件适合用FTP下载,网络上很热门的文伟置合用P2P下载。

然而,在下载资源的时候会碰到这样一种情况:资源的原始地址是一个很远的服务器,资源的下载者很少,当下载者要下载该资源时,资源数据的传输受到服务器出口带宽的影响,并且将通过很多网络节点传输到下载者的电脑中,严重影响速度。所以无论是传统的FTP下载还是现今流行的P2P下载,都无法达到理想的下载速度。曾经网络上流行过的乾坤小挪移工具,如今迅雷下载工具的离线下载功能都是用来处理这种资源,这些方法不需要用户在线,就可以将远方服务器上的资源慢慢移动到较近服务器,然后供应下载。但是利用离线下载工具需要服务器提供挪移功能,需要一定费用,而且单个服务器提取远方服务器上资源的速度依然很慢,用户虽然可以不用上线,却依然要等待很久。多人协作下载模式正是用于解决这种下载问题。

2.基本思想

多人协作下载是基于多线程下载的文件挪移方法。在单条线程下载速度慢的时候,我们一般使用多线程下载,即在发送端将要传输的文件分割为大小相当的多块,用多个线程,将这些块同时向目标端发送。目标端可监听发送端的传输请求,一旦接到新的请求,则创建一个新的线程,与发送端的发送线程对应,接收数据,并记录数据传输过程,下载完成的数据根据日志文档的位置记录对号入座,组成完整文件。

事实上在服务器上下载资源的时候,下载者必须遵守服务器设定的线程限制,所以往往只能使用单线程下载或者极少的几个线程进行下载。而服务器的下载线程限制是针对一个IP地址,如果能够用网内多条宽带,多个IP地址同时去下载文件的一部分,就能有效提高下载速率,多人协作下载就是这样的下载模式。发送端源头的操作方式与多线程下载类似,将文件分割为大小相当的多块,在传输过程中,将文件块传输请求发向网内多个目标,每条宽带就可以下载一个或多个文件块,然后上传到较近的目标端服务器,合并为原文件,以供快速下载。

见图示1:

3.实现原理

3.1下载过程

下载之前,首先要辨识资源属性,包括标识资源的ID、链接地址、保存目录、文件大名称、资源大小等。然后要先将资源分成若干块,这就需要建立一个临时文件来保存每块数据的信息,其中包括块在原文件的起始位置,块的长度,以及该块的文件名。

多人协作下载模式由发送端服务器,目标端服务器和一个客户机群组成,但是在下载的时候,只用到发送端服务器和客户机群,其中客户机群有一个主客户机,即创建下载任务的客户机。在下载过程中,主客户机不停地检测客户机群中是否有空闲客户机,一旦发现空闲客户机,就指示该客户机像发送端服务器申请接受数据。然后发送端将检测已经传输完成的和正在给其他客户机传输的数据大小及位置,取出接下来应传输的数据块并向客户机发送数据。客户机在接收数据时依照发送端服务器分割块时的文件名来对接收的数据块命名,同时创建临时文件,记录接收数据的起始位置,同时动态记录已传输数据的大小,以便监控传输进度,完成传输则退出。

然而在下载的过程中,不能保证每台客户机在传输期间都能保持在线状态,所以在传输中断的时候,会先检测客户机是否离线,如果还在线,则申请重新传输;倘若客户机短时间内没能继续接受数据,则判断为客户机离线,将直接结束该数据块的传输,发送端服务器也不会记录到已传输,这样一次数据块的传输就宣告失败,在下次又有空闲客户机的时候,依然从以上数据块开始传输。这种设计,就可以保证在下载过程中,每一个数据块都能够完整地传输到客户机中,而每一个客户机都能够不间断地下载数据块,不会因为一个接收了下载任务的客户机的断线而耽搁整体下载进度。

3.2上传及整合

主客户机创建下载任务的同时,将在目标端服务器上创建一个以资源文件名命名的文件夹,用来接收各客户机上传的数据块。

在文件的数据块被从发送端服务器下载到客户机时,会有临时文件记录数据块的已传输大小,当数据传输完成后,就会断开线程,此时一个完整的数据块就已经存在于某一台客户机的硬盘里。一块数据一旦下载完成,就会立刻通过ftp协议上传至目标服务器中主客户机创建的文件夹。

当所有数据块都上传到目标端服务器,主客户机又将创建一个文件,通过文件读写操作,将数据块的内容按照数据块名字的顺序拷贝到该文件,当所有数据块都连接到一起,就组成了一个完整的文件,这个文件将存在于目标端服务器以供网内所有用户下载。

4.小结

多人协作下载模式的设计旨在提高冷门资源的下载效率。基于多线程下载技术,由多用户同时提取发送端服务器上的资源,以达到快速下载的目的,针对较远服务器上的资源和下载人数少的资源,都有一定应用价值。

猜你喜欢
多线程
Java多线程同步机制在网络售票系统中的应用
Java并发工具包对并发编程的优化
基于多线程文件传输关键技术研究与实现
网页爬虫技术的关键技术研究探索
一种基于多线程的高速磁盘镜像算法
iOS并发程序设计中几种方法的特点及使用技巧研究
HTM L5 Web WOrker技术及应用研究
电站锅炉煤粉参数远程监控系统的软件设计与实现
一种高并发认证服务器的实现
一种低开销的并行重复数据删除算法