数据传输的方法及装置与流程

文档序号:14879530发布日期:2018-07-07 09:21阅读:171来源:国知局

本申请实施例涉及计算机技术领域,尤其涉及一种数据传输的方法及装置。



背景技术:

c/s架构又称client/server或客户端/服务端架构。服务端通常采用高性能的pc、工作站或小型机,并采用大型数据库系统,如oracle、sybase、informix或sqlserver,客户端需要安装专用的客户端软件。c/s架构具有一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务端两端,可有效地降低服务端的运算量。

随着网络技术的不断发展,客户端与服务端进行传输数据的数据量越来越大,在一些特定的业务中,客户端需要定时向服务端发送数据,例如大量的客户端在某个时间节点同时向服务端发送数据,这样服务端的的资源(如网络带宽、cpu负载、磁盘i/o等)会被瞬时过度损耗。为解决这一问题,在服务端可增加传输模块的数目,以使服务端具有比较高的吞吐量,而在传输模块进行分配传输任务时,通常无法达到负载均衡,例如,一些传输模块分配的传输任务较多,而一些传输模块的分配的传输任务较少,致使服务端的资源无法合理利用。

因此,如何使服务端在传输数据的过程中负载均衡,成为现有技术中亟需解决的技术问题。



技术实现要素:

鉴于上述问题,本申请提供一种数据传输的方法及装置,克服上述问题或者至少部分地解决上述问题。

本申请实施例提供一种数据传输的方法,包括:

解析客户端发送的数据传输的请求,获得所述客户端的信息;

使用预设算法对所述客户端的信息进行计算以获得哈希值,根据所述哈希值选定数据传输模块;

使用所述选定的数据传输模块与所述客户端建立连接,以进行数据传输。

可选地,在本申请实施例中,所述根据所述哈希值选定数据传输模块包括:

将所述哈希值与预设的不同数据传输模块对应的哈希值范围进行比较,获得所述哈希值所落入的哈希值范围;

将所述哈希值所落入的哈希值范围对应的传输模块作为所述选定的数据传输模块。

可选地,在本申请实施例中,所述预设算法为一致性哈希算法。

可选地,在本申请实施例中,还包括:每个所述数据传输模块设置有相应的线程,以使用所述线程进行数据传输。

可选地,在本申请实施例中,所述使用所述选定的数据传输模块与所述客户端建立连接,以进行数据传输包括:

所述选定的数据传输模块使用套接字长连接与所述客户端建立连接,以进行数据传输。

本申请实施例提供一种数据传输的方法,包括:

当检测到数据发生变动时,获得所述发生变动的数据,并生进行数据传输的请求;

向服务端发送进行数据传输的请求,以进行数据传输。

本申请实施例提供一种数据传输的装置,其特征在于,包括:

请求模块,配置为解析客户端发送的数据传输的请求,获得所述客户端的信息;

计算模块,配置为使用预设算法对所述客户端的信息进行计算以获得哈希值,根据所述哈希值选定数据传输模块;

数据传输模块,配置为与所述客户端建立连接,以进行数据传输。

可选地,在本申请实施例中,所述计算模块进一步配置为:

将所述哈希值与预设的不同数据传输模块对应的哈希值范围进行比较,获得所述哈希值所落入的哈希值范围;

将所述哈希值所落入的哈希值范围对应的传输模块作为所述选定的数据传输模块。

可选地,在本申请实施例中,所述预设算法为一致性哈希算法。

可选地,在本申请实施例中,所述数据传输模块进一步配置为:使用套接字长连接与所述客户端建立连接,以进行数据传输。

本申请实施例提供一种数据传输的装置,包括:

请求生成模块,配置为当检测到数据发生变动时,获得所述发生变动的数据,并生进行数据传输的请求;

请求发送模块,配置为向服务端发送进行数据传输的请求,以进行数据传输。

由以上技术方案可见,本申请实施例可解析客户端发送的数据传输的请求,获得所述客户端的信息;使用预设算法对所述客户端的信息进行计算以获得哈希值,根据所述哈希值选定数据传输模块;使用所述选定的数据传输模块与所述客户端建立连接,以进行数据传输;本申请实施例获得客户端的信息后,使用预设算法对客户端的信息进行计算以获得哈希值,根据哈希值选定数据传输模块,以使服务端在传输数据的过程中负载均衡。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1是本申请一种数据传输的方法的一实施例的流程图;

图2为本申请一种客户端与服务端进行使用socket进行通信的流程图;

图3为本申请一种一致性哈希算法的环形结构示意图;

图4是本申请一种数据传输的方法的另一实施例的流程图;

图5是本申请一种数据传输的方法的另一实施例的流程图;

图6是本申请一种数据传输装置的一实施例的结构图;

图7是本申请一种数据传输装置的另一实施例的结构图;

图8是本申请一执行数据传输方法的一电子设备的硬件结构示意图。

具体实施方式

本申请实施例获得客户端的信息后,使用预设算法对客户端的信息进行计算以获得哈希值,根据哈希值选定数据传输模块,以使服务端在传输数据的过程中负载均衡。

当然,实施本申请实施例的任一技术方案不必一定需要同时达到以上的所有优点。

为了使本领域的人员更好地理解本申请实施例中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请实施例一部分实施例,而不是全部的实施例。基于本申请实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请实施例保护的范围。

下面结合本申请实施例附图进一步说明本申请实施例具体实现。

参见图1,在本申请一具体实现中,所述数据传输的方法包括:

s101、解析客户端发送的数据传输的请求,获得所述客户端的信息;

具体地,在本实施例中,可使用socket(套接字)监听客户端发送的请求。网络上的两个应用程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。图2为本申请一种客户端与服务端进行使用socket进行通信的流程图。如图2所示,服务端创建一个socket后,使用bind函数绑定一个网络地址(ip地址)和端口号(port),并使用listen函数监听客户端发送的数据传输的请求。

当监听到客户端发送的数据传输的请求时,对所述请求进行解析,获得客户端的信息,所述客户端的信息包括但不限于:客户端的ip地址、主机名、端口号;所述客户端的信息可用于区别不同的客户端。例如,可使用getremotesocketaddress函数获得客户端的ip地址。

s102、使用预设算法对所述客户端的信息进行计算以获得哈希值,根据所述哈希值选定数据传输模块;

具体地,在本实施例中,所述预设算法为一致性哈希算法(consistenthashing)。一致性哈希算法可将对象以节点的形式映射到一个虚拟环形结构上。所述对象可以是客户端的信息和/或传输模块的标识码。图3为本申请一种一致性哈希算法的环形结构示意图。如图3所示,环形结构301上设置有取值范围为1~232的节点,在这里,232只是一个示例,环形结构的大小当然还可以是其它预设数值。

本实施例中可包含若干数据传输模块,每个数据传输模块可设置有标识码,例如所述标识码可以是一个随机数;将数据传输模块标识码303经过一致性哈希计算后,获得数据传输模块哈希值304,数据传输模块哈希值304可散列均衡的分布在所述环形结构301上。

当获得客户端信息305后,使用一致性哈希算法302对所述客户端信息305进行计算以获得哈希值306。将哈希值306映射到以顺时针方向相邻的数据传输模块哈希值304,并将所述顺时针方向相邻的数据传输模块哈希值304对应的数据传输模块作为选定的数据传输模块。

s103、使用所述选定的数据传输模块与所述客户端建立连接,以进行数据传输。

在本实施例中,可使用套接字长连接与所述客户端建立连接。所述套接字长连接可在客户端与服务端暂停数据通信的时段,使客户端与服务端之间定时传输心跳数据,以确保套接字不断开连接。

例如,可使用read函数从socket中读取客户端发送的数据,并使用write函数,向socket中写入数据,以将数据发送至客户端。

在本实施例中,当客户端与服务端的socket连接断开后,将环形结构301上该客户端对应的节点移除。

本实施例获得客户端的信息后,使用预设算法对客户端的信息进行计算以获得哈希值,根据哈希值选定数据传输模块,使数据处理模块分配的客户端数目相对均衡,即使服务端在传输数据的过程中负载均衡。

参见图4,在本申请另一具体实现中,所述数据传输的方法包括:

s401、解析客户端发送的数据传输的请求,获得所述客户端的信息;

s402、使用预设算法对所述客户端的信息进行计算以获得哈希值;

s403、将所述哈希值与预设的不同数据传输模块对应的哈希值范围进行比较,获得所述哈希值所落入的哈希值范围;

具体地,在本实施例中,可根据数据传输模块的标识码经过一致性哈希计算后,获得数据传输模块哈希值,并根据所述数据传输模块哈希值确定哈希值的取值范围。

例如,存在4个数据存储模块,对应的标识码经过一致性哈希计算后,获得key1、key2、key3、key4,则4个数据存储模块的取值范围分别为[1,key1)∪(key4,232]、(key1,key2)、(key2,key3)、(key3,key4)。

具体地,对用户信息进行一致性哈希计算后,获得用户信息哈希值,并与数据存储模块的哈希值进行对比,以确定用户信息哈希值所落入的哈希值范围。

s404、将所述哈希值所落入的哈希值范围对应的传输模块作为所述选定的数据传输模块。

s405、使用所述选定的数据传输模块与所述客户端建立连接,以进行数据传输。

可选地,在本实施例中,每个所述数据传输模块设置有相应的线程,以使用所述线程进行数据传输。例如,可在主线程中监听并接收socket连接,而在数据传输模块相应的线程中进行接收数据,可降低主线程的负载,降低主线程中出现线程阻塞的可能性。

具体地,所述线程的数目是可以配置的,例如,可以配置文件、注册表的方式对线程的数目进行配置。

可选地,在本实施例中,将环形结构上的节点存储到树状数据结构中,例如,树状数据结构可以是红黑树(rb-tree),红黑树是一种近似平衡的二叉树,可支持结点频繁高效地增、删、改、查,其时间复杂度为o(logn)。

可选地,在本实施例中,在客户端与服务端进行数据传输时,可设置自定义指令,例如:“$”可表示客户端申请数据传输;“#accept#”可表示服务端允许数据传输,“*”可表示为客户端数据传输开始符,“#eof#”可表示为客户端数据传输结束符。如客户端在传输多个文件时,可在每个文件数据之前添加“*”,并在每个文件数据结尾添加“#eof#”。

本实施例中,步骤s401、s402分别类似上述图1实施例中的步骤s101、s102,详细不再赘述。

本实施例可在服务端设置若干线程进行传输数据,可降低主线程中出现线程阻塞的可能性,并增加服务端的吞吐量。服务端还在数据结构上进行优化,以提高处理模块在传输数据的效率。

参见图5,在本申请另一具体实现中,所述方法包括:

s501、当检测到数据发生变动时,获得所述发生变动的数据,并生进行数据传输的请求。

s502、向服务端发送进行数据传输的请求,以进行数据传输。

在本实施例中,可根据从配置文件中获得的服务端ip地址和端口号创建socket,并生进行数据传输的请求。

本实施例使用socket对服务端进行连接。具体地,可使用connect函数与服务端进行连接。服务端接收客户端的连接后,向客户端发送指令,如“#accept#”。客户端接收到该指令后进一步向所述服务端发送数据。

本实施例中,在与所述服务端进行数据传输时,在数据的前端添加自定义指令。所述自定义指令如图4对应实施例,在此不再赘述。

本实施例中,客户端在暂停所述服务端进行数据通信时段,可以定时向服务端发送心跳信息,例如,可发送任意一段字符串,或者设置socket的keepalive属性为true,使socket自动与服务端保持连接。

参见图6,在本申请一具体实现中,所述数据传输的装置包括:

请求模块601、配置为解析客户端发送的数据传输的请求,获得所述客户端的信息;

具体地,在本实施例中,可使用socket(套接字)监听客户端发送的请求。网络上的两个应用程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。图2为本申请一种客户端与服务端进行使用socket进行通信的流程图。如图2所示,服务端创建一个socket后,使用bind函数绑定一个网络地址(ip地址)和端口号(port),并使用listen函数监听客户端发送的数据传输的请求。

当监听到客户端发送的数据传输的请求时,对所述请求进行解析,获得客户端的信息,所述客户端的信息包括但不限于:客户端的ip地址、主机名、端口号;所述客户端的信息可用于区别不同的客户端。例如,可使用getremotesocketaddress函数获得客户端的ip地址。

计算模块602、配置为使用预设算法对所述客户端的信息进行计算以获得哈希值,根据所述哈希值选定数据传输模块;

具体地,在本实施例中,所述预设算法为一致性哈希算法(consistenthashing)。一致性哈希算法可将对象以节点的形式映射到一个虚拟环形结构上。所述对象可以是客户端的信息和/或传输模块的标识码。图3为本申请一种一致性哈希算法的环形结构示意图。如图3所示,环形结构301上设置有取值范围为1~232的节点,在这里,232只是一个示例,环形结构的大小当然还可以是其它预设数值。

本实施例中可包含若干数据传输模块,每个数据传输模块可设置有标识码,例如所述标识码可以是一个随机数;将数据传输模块标识码303经过一致性哈希计算后,获得数据传输模块哈希值304,数据传输模块哈希值304可散列均衡的分布在所述环形结构301上。

当获得客户端信息305后,使用一致性哈希算法302对所述客户端信息305进行计算以获得哈希值306。将哈希值306映射到以顺时针方向相邻的数据传输模块哈希值304,并将所述顺时针方向相邻的数据传输模块哈希值304对应的数据传输模块作为选定的数据传输模块。

数据传输模块603、配置为使用所述选定的数据传输模块与所述客户端建立连接,以进行数据传输。

在本实施例中,可使用套接字长连接与所述客户端建立连接。所述套接字长连接可在客户端与服务端暂停数据通信的时段,使客户端与服务端之间定时传输心跳数据,以确保套接字不断开连接。

例如,可使用read函数从socket中读取客户端发送的数据,并使用write函数,向socket中写入数据,以将数据发送至客户端。

在本实施例中,当客户端与服务端的socket连接断开后,将环形结构301上该客户端对应的节点移除。

本实施例获得客户端的信息后,使用预设算法对客户端的信息进行计算以获得哈希值,根据哈希值选定数据传输模块,使数据处理模块分配的客户端数目相对均衡,即使服务端在传输数据的过程中负载均衡。

参见图7,在本申请另一具体实现中,所述装置包括:

请求生成模块701,配置为当检测到数据发生变动时,获得所述发生变动的数据,并生进行数据传输的请求。

请求发送模块702,配置为向服务端发送进行数据传输的请求,以进行数据传输。

在本实施例中,可根据从配置文件中获得的服务端ip地址和端口号创建socket,并生进行数据传输的请求。

本实施例使用socket对服务端进行连接。具体地,可使用connect函数与服务端进行连接。服务端接收客户端的连接后,向客户端发送指令,如“#accept#”。客户端接收到该指令后进一步向所述服务端发送数据。

本实施例中,在与所述服务端进行数据传输时,在数据的前端添加自定义指令。所述自定义指令如图4对应实施例,在此不再赘述。

本实施例中,客户端在暂停所述服务端进行数据通信时段,可以定时向服务端发送心跳信息,例如,可发送任意一段字符串,或者设置socket的keepalive属性为true,使socket自动与服务端保持连接。

图8是本申请执行数据传输的方法的一些电子设备的硬件结构示意图。根据图8所示,该设备包括:

一个或多个处理器801以及存储器802,图8中以一个处理器801为例。

执行数据传输的方法的设备还可以包括:输入装置803和输出装置803。

处理器801、存储器802、输入装置803和输出装置804可以通过总线或者其他方式连接,图8中以通过总线连接为例。

存储器802作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的数据传输的方法对应的程序指令/模块。处理器801通过运行存储在存储器802中的非易失性软件程序、指令以及模块,从而执行服务端的各种功能应用以及数据处理,即实现上述方法实施例中数据传输的方法。

存储器802可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据数据传输装置的使用所创建的数据等。此外,存储器802可以包括高速随机存取存储器802,还可以包括非易失性存储器802,例如至少一个磁盘存储器802件、闪存器件、或其他非易失性固态存储器802件。在一些实施例中,存储器802可选包括相对于处理器801远程设置的存储器802,这些远程存储器802可以通过网络连接至数据传输的装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置803可接收输入的数字或字符信息,以及产生与数据传输的装置的用户设置以及功能控制有关的键信号输入。输入装置803可包括按压模组等设备。

所述一个或者多个模块存储在所述存储器802中,当被所述一个或者多个处理器801执行时,执行上述任意方法实施例中的数据传输的方法。

上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。

本申请实施例的电子设备以多种形式存在,包括但不限于:

(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iphone)、多媒体手机、功能性手机,以及低端手机等。

(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:pda、mid和umpc设备等,例如ipad。

(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如ipod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。

(4)服务端:提供计算服务的设备,服务端的构成包括处理器801、硬盘、内存、系统总线等,服务端和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。

(5)其他具有数据交互功能的电子装置。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,所述计算机可读记录介质包括用于以计算机(例如计算机)可读的形式存储或传送信息的任何机制。例如,机器可读介质包括只读存储器(rom)、随机存取存储器(ram)、磁盘存储介质、光存储介质、闪速存储介质、电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)等,该计算机软件产品包括若干指令用以使得一台计算机设备(可以是个人计算机,服务端,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本申请实施例的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1