发明内容
为了解决上述技术问题,本发明提供了一种实现文件下载的网络通信系统及方法,使得通信网络中客户端的下载速度不受服务器处理能力和网络带宽瓶颈的限制。这样,即使在同时接入服务器的客户端数目很多时,用户下载文件的速度也不会受到影响。
本发明进一步的目的在于提供一种文件的下载方法,使用户可以享受在线多媒体业务,例如在线收听音乐或在线收看视频等等,极大地满足用户对在线多媒体业务服务质量的需求。
本发明所述实现文件下载的网络通信系统包括:通过通信网络连接的对等P2P服务器、文件服务器、种子描述TPT服务器以及一个以上的客户端;
其中,所述P2P服务器用于向所述一个以上的客户端公布可下载的文件,并通过所述通信网络处理客户端的登陆、退出、下载、查询种子请求;
所述文件服务器用于存储提供给客户端下载的文件;
所述TPT服务器用于存储提供给客户端下载的文件对应的TPT文件;
所述一个以上的客户端通过所述通信网络从所述TPT服务器下载所需文件对应的TPT文件,并根据所下载的TPT文件,通过P2P协议或其他通讯协议从所述通信网络中的其他客户端或所述文件服务器下载所需的文件;所述客户端发送该客户端的网络类型或防火墙类型到所述P2P服务器;
所述P2P服务器还用于根据该客户端的网络类型或防火墙类型将所述文件分组列表中与所述客户端具有相同网络类型或防火墙类型的客户端信息发送给所述客户端。
本发明所述一个以上的客户端通过超文本传输协议或文件传输协议从TPT服务器下载所需文件对应的TPT文件。
本发明所述一个以上的客户端通过传输控制协议或用户数据报协议从通信网络中的其他客户端下载所需的文件,或通过超文本传输协议或文件传输协议从所述文件服务器下载所需的文件。
本发明所述实现文件下载的方法,适用于包括通过通信网络连接的对等P2P服务器、文件服务器、种子描述TPT服务器以及一个以上的客户端的网络通信系统,包括:
a、在用户通过客户端从发布的文件中选择需要下载的文件后,该客户端根据用户所选择的文件名到TPT服务器上下载与该文件对应的、包含该文件标识FileID的TPT文件;
b、所述客户端登陆P2P服务器,获取该客户端的用户标识UIN;
c、所述客户端向P2P服务器发出下载及种子查询请求,并在所述下载请求中携带该客户端的UIN及步骤a所述的FileID;发送该客户端的网络类型或防火墙类型到所述P2P服务器;
d、P2P服务器将该客户端的UIN加入到该FileID对应的文件分组列表当中,根据该客户端的网络类型或防火墙类型将所述文件分组列表中与所述客户端具有相同网络类型或防火墙类型的客户端信息发送给所述客户端;
e、所述客户端根据P2P服务器发送的与所述客户端具有相同网络类型或防火墙类型的客户端信息与这些客户端建立连接,并通过P2P协议或其他通讯协议从这些客户端或文件服务器交换所需文件的各个分片数据。
步骤a所述发布包括:根据即将提供给用户下载的文件制作每个文件对应的TPT文件,并将制作好的TPT文件上传到TPT服务器;将提供给用户下载的文件上传至文件服务器;在P2P服务器上公布即将提供给用户下载的文件,供用户通过客户端进行下载查询。
本发明所述TPT文件进一步包括所对应文件的分片数据数目和每个分片数据的大小、每个分片数据的校验值及该TPT文件的校验值和版本号;
步骤a所述客户端下载TPT文件后进一步包括:检验所下载TPT文件的格式和版本是否正确,如果检验正确,则继续执行步骤b;否则,禁止该用户下载所述文件并结束;
步骤e在客户端从通信网络中的与所述客户端具有相同网络类型或防火墙类型的客户端交换到分片数据后,进一步根据每个分片数据的校验值对交换到的分片数据进行校验,如果校验正确,则接收;否则,丢弃该分片数据。
本发明所述校验采用HASH运算。
在步骤c之后进一步包括:P2P服务器检验该客户端的UIN及所要下载文件的FileID是否正确,同时检查该文件是否已经发布过,若UIN及FileID正确且该文件已经发布过,则继续执行步骤d;否则,通知客户端无法下载该文件并结束。
本发明所述检验所要下载文件的FileID是否正确为:将所要下载文件的文件名经过HASH运算后得到的32位整型值与FileID进行比较,如果相同,则检验正确,否则检验不正确。
在步骤d,所述P2P服务器进一步将所接收FileID对应文件的下载配置参数返回所述客户端;
步骤e所述交换为:所述客户端根据P2P返回的下载配置参数从与所述客户端具有相同网络类型或防火墙类型的客户端交换得到所需文件的各个分片数据。
步骤d所述的下载配置参数是由P2P服务器的配置文件决定的,主要包括:下载时启动的线程个数、每个线程的上传和下载最大限速/最小限速、P2P上传限速、P2P下载限速、最多连接的客户端数目、查询种子的间隔时间、P2P下载到达什么速度时可以降低从所述文件服务器下载的速度、P2P下载到达什么速度时可以提升从所述文件服务器下载的速度、P2P上传限速百分比。
在步骤e,所述客户端交换得到所有的分片数据后进一步包括:将交换来的分片数据按照顺序重新组合成所要下载的文件。
本发明所述方法进一步包括:在客户端在登陆P2P服务器之后,定时发送心跳信号到P2P服务器;P2P服务器定时检测来自所有已登陆的客户端的心跳信号,如超时未接收到心跳信号,则踢出对应的客户端,释放为该客户端分配的资源,并从相关的文件分组列表中删除该客户端信息。
本发明所述方法进一步包括:P2P服务器在收到客户端的退出请求后,释放为客户端分配的资源,并从相关的文件分组列表中删除该客户端信息。
由此可以看出,本发明所述的网络通信系统和方法通过将对等P2P技术与现有下载方法相结合,使得客户端可以直接从通信网络中的其他客户端直接下载所需的文件,这样一来,一方面可以大量节省服务器和带宽消耗,另一方面也能够加快客户端下载数据的速度,从而极大地增强了用户的体验。
另外,本发明所述的方法在从其他客户端下载分片数据的同时,还可以从文件服务器直接下载所需的分片数据,这样不仅可以保证从通信网络中下载的分片数据的连续性和有序性,实现在线多媒体业务,还可以避免在种子较少的情况下,下载速度较慢的问题。
再者,本发明所述的方法通过在所述文件分组列表中记录已下载同一文件的所有种子的网络类型或防火墙类型,为P2P服务器的种子管理提供了准确的信息,并且可以根据当前要下载该文件的客户端类型为该客户端选择最优的种子,进一步保证该客户端的下载速度。
具体实施方式
为使发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
本发明的核心思想是将对等互联网技术P2P(Peer to Peer)技术与文件下载技术相结合,将客户端从单一服务器下载数据的模式改变为客户端之间直接交换数据的下载模式,因而可以改变由于服务器的处理瓶颈而限制同时下载文件的客户端数目的缺陷。
另外,本发明通过将容量较大的文件进行分片,即将文件划分成若干部分,使得客户端可以同时从通信网络中的多个客户端或文件服务器下载同一文件的不同分片,可以进一步保证客户端的下载速度。同时,由于需要下载数据的客户端可以从通信网络中的其它客户端直接下载数据,因此,通信网络中同时下载数据的客户端数目越多,分布越集中,它们之间数据交互的效果就越好,从而可以大大提高数据的下载速度。
基于上述思想,本发明提供了一种网络通信系统,该网络通信系统如图2所示,主要包括:P2P服务器、文件服务器、种子描述(TPT)服务器以及一个以上的客户端。所述P2P服务器、TPT服务器以及文件服务器分别通过通信网络连接到所述一个以上的客户端,以实现客户端到所述P2P服务器、TPT服务器以及文件服务器的信息交互;通信网络中的每个客户端也通过通信网络连接到其它的客户端,以实现客户端之间的数据交换。
其中,所述P2P服务器主要负责可下载文件的发布,通过所述通信网络处理客户端的登陆、退出、下载、查询种子、心跳维护等请求;
所述文件服务器用于存储提供给用户下载的文件;
所述TPT服务器用于存储对应各个提供给用户下载的文件对应的TPT文件;
所述一个以上的客户端通过所述通信网络从TPT服务器下载所需文件对应的TPT文件,并根据所下载的TPT文件从所述通信网络中的其他客户端或文件服务器下载所需文件的各个分片数据。
在文件下载的过程中,通信网络中的客户端可以通过HTTP、FTP或其它多种通信方式从TPT服务器下载TPT文件,从所述文件服务器下载所需文件的各个分片数据,或者通过传输控制协议(TCP)或用户数据报协议(UDP)从所述通信网络中的其他客户端下载所需文件的各个分片数据。
在通过上述网络通信系统下载文件的过程中,客户端首先需要从P2P服务器发布的文件中选择需要下载的文件;然后,从TPT服务器下载该文件对应的TPT文件,从中获得该文件的相关信息,例如该文件的FileID、分片数据的数目以及每个分片数据的大小等等;接下来,根据这些相关信息向P2P服务器查询其它在线并下载了该文件的客户端信息,即向P2P服务器查询种子;在获得了种子之后,该客户端将从查询到的种子下载该文件的各个分片数据,同时,为了保证所下载文件各个分片数据的连续性和有序性,客户端还可以同时从所述文件服务器下载所需的分片数据。
下面将通过具体的实施例详细描述本发明所述实现文件下载的方法。如图3所示,本发明所述的文件下载方法具体包括以下步骤:
A、预先在P2P服务器、文件服务器以及TPT服务器发布提供给用户下载的文件。
该步骤所述的发布主要包括:
首先,根据即将提供给用户下载的文件制作每个文件的TPT文件,并将制作好的TPT文件上传到所述TPT服务器;
然后,将提供给用户下载的文件上传至所述文件服务器;
最后,在所述P2P服务器上公布即将提供给用户下载的文件,供用户通过客户端进行下载查询。
其中,所述TPT文件主要包含了该TPT文件所对应文件的标识FileID、该文件的分片数据数目和每个分片数据的大小、每个分片数据的校验值及该TPT文件自身的校验值和版本号等等。
所述文件的分片数据数目和分片大小是由该TPT文件所对应文件的大小以及用户实际选择的业务类型来确定的,例如,如果是在线收听音乐业务,则分片数据的大小通常为16K字节,此时该文件的分片数据数目等于文件大小与16K字节的商,而如果是在线收看视频业务,则分片数据的大小通常为50K字节,此时该文件的分片数据数目等于文件大小与50K字节的商。
另外,所述FileID就是对该文件的文件名进行校验后得到的校验值,其中,计算FileID、每个分片数据的校验值或TPT文件的校验值所采用的校验算法可以是多种常用的校验算法,例如哈什(HASH)运算等等。例如,在本发明的一个优选实施例中,所述FileID就是所对应文件的文件名经过HASH运算后的得到的32位整型值。
B、在用户通过客户端从已发布的文件中选择需要下载的文件时,该客户端根据所要下载的文件名到TPT服务器上下载与该文件对应的TPT文件;
在下载得到TPT文件后,所述客户端还可以进一步解析该TPT文件,并检验所下载TPT文件的正确性,若检验正确,则继续执行步骤C,否则,禁止该用户下载所述文件并结束。
所述检验为:检验该TPT文件的格式和版本是否正确。
所述检验还可以进一步包括采用相应的校验方法,例如HASH运算,对该TPT文件本身进行校验。
C、所述客户端登陆P2P服务器,P2P服务器返回唯一的用户标识(UIN)到所述客户端。
该步骤所述UIN是P2P服务器在预先设定的数值范围内顺序选择出来的,该数值范围与P2P服务器最多可以支持的在线用户数有关,例如,若一台P2P服务器最多可以10万在线用户,则UIN的取值范围可以是1~100000。
D、客户端获得UIN后,根据用户选择下载的文件,向P2P服务器发出下载请求,在所述下载请求中携带该客户端的UIN及所要下载文件的FileID。
E、P2P服务器检验该客户端的UIN及所要下载文件的FileID是否正确,同时检查该文件是否已经发布过,若UIN及FileID正确且该文件已经发布过,则执行步骤F;否则,通知客户端无法下载该文件并结束。
该步骤所述P2P服务器检验所要下载文件的FileID是否正确的方法为将所要下载文件的文件名经过HASH运算后得到的32位整型值与FileID进行比较,如果相同,则检验正确,否则检验不正确。
F、P2P服务器将该客户端的UIN加入到该文件对应的文件分组列表当中,同时返回该文件对应的下载配置参数给客户端。
所述文件分组列表简单来说就是将已经将下载所发布文件的所有客户端进行分类整理,P2P服务器会把下载同一文件的所有客户端的信息与该文件进行关联,并将关联到同一文件的所有客户端信息记录在该文件对应的文件分组列表中,供客户端进行查询。所述客户端信息包括:客户端地址、客户端所在网络的网络类型或防火墙类型等等。
该步骤所述文件对应的下载配置参数主要包括:下载时启动的线程个数、每个线程的上传和下载最大限速/最小限速、P2P上传限速、P2P下载限速、最多连接的客户端数目、查询种子的间隔时间、P2P下载到达什么速度时可以降低从文件服务器的下载速度、P2P下载到达什么速度时可以提升从文件服务器的下载速度、P2P上传限速百分比等等。
上述这些配置参数是由P2P服务器的配置文件决定的,所述配置文件通常包括默认配置和特殊配置两种类型,其中,默认配置包含了针对所有文件的通用配置参数,而特殊配置只包含了针对某些个别文件的特殊配置参数。如果所发布的文件没有对应的特殊配置文件,则P2P服务器会向客户端返回默认配置参数,如果有对应的特殊配置文件,则P2P服务器会将默认配置参数和特殊配置参数一起返回客户端。需要说明的是,P2P服务器的所有配置文件是可以动态更新的,即可以在P2P服务器运行时进行修改或更新。
G、客户端收到该文件对应的下载配置参数后,发送自身的UIN及所要下载文件的FileID到P2P服务器,向P2P服务器查询其它下载该文件的客户端信息,即向P2P服务器查询种子。
客户端在发送查询种子请求时,还可以进一步发送该客户端的网络类型或防火墙类型到所述P2P服务器,请求P2P服务器根据该客户端的网络类型查询同一分组中具有相同网络类型的其它客户端信息。
H、P2P服务器根据来自该客户端的UIN、FileID返回该文件所对应文件分组列表中其它客户端的信息,即向所述客户端返回其它种子信息。
若客户端查询种子的请求中包含了该客户端的网络类型,则P2P服务器将进一步根据该客户端的网络类型或防火墙类型将该文件分组列表中与所述客户端具有相同网络类型或防火墙类型的客户端信息,即种子信息发送给所述客户端。这样一来,所述客户端和这些种子进行数据交互时的连通性就很高,同时数据传输的速度也将更快。
I、所述客户端尝试与所述种子建立连接,并查询这些种子中是否存在自身所需的文件或该文件的分片数据,如果有,则根据TPT文件中的下载配置参数与所述种子交换数据,得到所要下载文件的各个分片数据。
在该步骤中,所述客户端将通过TCP/UDP方式从所述种子交换所需的各个分片数据。
在交换到每个分片数据后,客户端还将进一步根据从步骤B所下载TPT文件中解析得到的每个分片数据的校验值对交换来的分片数据进行校验,如果校验正确,则接收所述分片数据;否则,丢弃所述分片数据。
在该步骤中,由于从各个种子交换来的分片数据是随机排列的,因此,为了得到完整的文件,客户端还需要将交换来的分片数据重新按照顺序组合成所要下载的文件。
从上述过程可以看出,采用P2P技术后,可以有效地解决服务器的瓶颈问题,同时由于所有在线的客户端都会将自身下载的文件共享给通信网络的其他客户端,因此,在通常情况下通信网络中将会有足够的种子存在,并且下载同一文件的客户端数目越多,分布越集中,它们之间数据交互的效果就越好,这样,使得一台服务器可以支持大量用户同时下载,并且能够保证所有用户的下载速度。
另外,通过在所述文件分组列表中记录已下载同一文件的所有种子的网络类型或防火墙类型,为P2P服务器的种子管理提供了准确的信息,并且可以根据当前要下载该文件的客户端类型为该客户端选择最优的种子,进一步保证该客户端的下载速度。
但是,由于上述方法交换来的分片数据是随机排列的,因此,只有客户端在下载了文件的所有分片数据之后,才能获得正确、完整的文件,这对一般的文件下载业务来将是可以接受的,但是这会给在线多媒体业务,例如在线收听音乐或在线收看视频节目等,带来较大的延时,影响用户的体验。
因此,在本发明的一个优选实施例中,为了保证客户端所下载数据分片的连续有序,客户端在与种子进行分片数据交换的同时,也会根据P2P服务器返回的下载配置参数启动常见的HTTP或FTP下载方式,从文件服务器上下载需要的分片数据,并通过一定的算法和通讯机制保证客户端所下载数据分片的连续性和有序性。
例如,在线收听音乐的过程中,对于用于正在收听的音乐,如果该音乐文件还没有下载完全,则该用户的客户端会优先使用HTTP下载的方式,从文件服务器获得该音乐播放过程中所需的音乐文件分片数据,同时,对于尚未播放的音乐文件或者音乐文件的分片数据,仍可以采用P2P下载的方式来下载。
上述这种下载方法,既加快了下载的速度,减少了文件服务器的负荷,同时又保证了所下载文件的连续有序。
其中,客户端从文件服务器下载分片数据的比例由P2P服务器返回的下载配置参数控制,并可以根据实际情况进行动态调整,从而保证在绝大多数情况下,多数的分片数据是通过与其他客户端交换获得的,从而可以节省大量的服务器带宽资源。
上述优选实施例所述的方法可以支持大量用户同时享受在线多媒体业务,例如在线收听音乐,或在线收看视频节目,极大地满足用户对在线多媒体业务服务质量的需求。
在本发明所述的方法中,为了维护客户端与P2P服务器之间的连接,一旦客户端登陆P2P服务器,就会定时发送心跳信号到P2P服务器,同时P2P服务器也会定时检测来自所有已登陆的客户端的心跳信号,如超时未接收到心跳信号,则踢出对应的客户端,释放为该客户端分配的资源,并从相关的文件分组列表中删除该客户端信息。
另外,在线多媒体业务结束后,例如在用户收听完音乐或收看完视频节目后,客户端会向P2P服务器发送登出(Logout)请求,然后主动退出。在收到客户端的Logout请求后,P2P服务器随即释放为客户端分配的资源,并从相关的文件分组列表中删除该客户端信息。