具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明一实施例提供了一种控制数据发送的方法,如图1所示,该方法包括:
101、数据生产者模块与接收端设备的消费者模块建立通信通道,并创建与接收端设备的消费者模块对应的发送控制单元。
其中,通信通道用于实现业务数据的接收和发送,优选的数据传输模块为可靠的传输模块,比如可以包括:TCP/TIPC/SCTP/UNIX/LLC2等传输机制中的任意一种或几种。
值得说明的是,通信通道还可以呈现为套接字socket、文件描述符、句柄等。
102、发送控制单元当检测到通信通道允许发送业务数据时,依次根据缓存中的待发送业务数据的索引获取待发送业务数据,并生成新的待发送数据,通过通信通道,发送新的待发送数据到接收端设备。
具体的,由于待发送业务数据的索引是数据生产者模块的数据产生单元根据待发送业务数据生成的,则待发送业务数据与该索引是一一对应的,待发送业务数据的索引由待发送业务数据产生单元发送到发送控制单元,发送控制单元从而根据已缓存的待发送业务数据的索引可以在内存、业务数据库或者应用文件等介质中,获取到待发送的业务数据,进而将获取到的业务数据缓存起来,根据待发送业务数据的索引以及获取到的业务数据生成新的待发送数据,进行发送。
本发明实施例提供的控制数据发送的方法,当确定检测机制可以发送业务数据时,从缓存中确定待发送业务数据的索引,根据该待发送业务数据的索引获取与该索引对应的待发送数据,生成新的待发送数据,并通过通信通道发送该新的待发送数据。与现有技术中,发送端设备必须要缓存所有的待发送数据,并在通信通道允许的情况下,在发送这些数据相比,本发明实施例提供的技术方案,只需要缓存待发送数据的索引,索引的数据量小于与该索引对应的业务数据的数据量,从而显著缓解了资源浪费的问题,降低了***开销。
本发明另一实施例提供了一种控制数据发送的方法,如图2所示,该方法包括:
201、数据生产者模块的数据产生单元根据待发送业务数据生成待发送业务数据的索引,并发送至发送控制单元。
可选的,该方法由产生业务数据的发送端设备执行,该业务数据可以是该发送端设备的数据产生模块接收的外界网络或者其它发送端设备发送的数据,或者是该发送端设备的数据产生模块内部发生变化的数据。
优选的,按照业务数据的组织方式,生成与该业务数据对应的索引。
202、发送控制单元保存业务数据的索引至预设缓存结构中。
其中,预设缓存结构至少包括:先进先出队列和树形结构。具体的,在缓存该业务数据的索引时,按照以下两种方式进行结合存储:
第一种存储方式:按照获取到业务数据的以先进先出队列的方式顺序存放;
第二中存储方式:将索引按照树形结构存放。
进一步的,可以根据用户或者***设定的其它存放规则来存储业务数据的索引。
值得说明的是,当采用第一种存储方式时,能够保证业务数据按照获取到的顺序依次发送给业务数据的接收端,从而简化了业务数据发送控制与调度的处理逻辑;当采用第二种存储方式时,在清除特定的索引数据时,能够提高该业务数据的索引的查找效率。
203、当检测到通信通道允许发送业务数据时,根据缓存的待发送业务数据的索引获取待发送业务数据,并生成新的待发送数据,通过通信通道,发送新的待发送数据到接收端设备。
值得说明的是,在通过通信通道,发送待发送数据过程中,还包括:以下三种情况:
第一种情况:当数据生产者模块的数据产生单元对相同待发送业务数据进行两次或者多次操作时,由于针对每一次操作都会发送该待发送业务数据的索引到发送控制单元,发送控制单元只保留数据产生单元最后一次发送的待发送业务数据的索引。
具体的,当对同一份业务数据进行多次操作时,相应的发送控制单元就会接收并缓存与该业务数据的操作次数对应个数的待发送业务数据的索引,如果不做处理就会根据该多个索引获取到与上述的业务数据的索引个数的同等数量的多组相同的业务数据,所以这时需要将缓存的多个相同的业务数据的索引删除,只保留一个该业务数据的索引,从而只保留一组待发送业务数据,并将该保留的业务数据发送给数据传输模块。
第二种情况:当待发送业务数据操作变化时,数据生产者模块的数据产生单元根据待发送业务数据的操作不同,生成附加信息;并根据待发送业务数据生成的待发送业务数据的索引,将附加信息和待发送业务数据的索引一起发送至发送控制单元;数据生产者模块的发送控制单元根据该附加信息以及获取的待发送业务数据,生成通过通信通道发送的新的待发送数据。发送控制单元从数据产生单元接收待发送业务数据的索引和附加信息后,当判断在预设缓存结构中保存有相同的待发送业务数据的索引时,以当前所接收的附加信息更新预设缓存结构中保存的待发送业务数据的索引对应的附加信息。
其中,附加信息用于记录对当前待发送业务数据的操作命令或操作改变。当数据产生单元对相同待发送业务数据进行两次修改时,数据产生单元将附加信息和根据待发送业务数据生成的待发送业务数据的索引一起,发送至发送控制单元;数据产生单元根据待发送业务数据的索引和树形缓存结构,在树形结构中快速查找到预设缓存结构中存在的上一次待发送业务数据的索引,并从先进先出队列和树形结构中删除。发送控制单元只保留数据产生单元最后一次发送的待发送业务数据的索引。
当数据产生单元对相同待发送业务数据进行先进行添加,后删除时,数据产生单元将删除操作相关的附加信息和待发送业务数据的索引一起,发送至发送控制单元;发送控制单元根据待发送业务数据的索引和树形缓存结构,在树形结构中快速查找到预设缓存结构中存在的上一次待发送业务数据的索引,并从先进先出队列和树形结构中删除。如果删除成功,发送控制单元不保留待发送业务数据的索引。
当前数据相对于原始存储的数据发生的改变,进而能够只对该发生变化的一部分数据进行处理。比如,业务数据发生的变化为:在原有业务数据的基础上添加了数据,则根据该添加的数据生成附加信息,其中该附加信息中描述有在该业务数据上添加了哪些数据,进而就能够在原缓存的业务数据的索引上直接添加上附加信息中描述的数据,构成最终的待发送的任务数据,这种情况下不必再重新获取之前已经缓存的业务数据,节约了***资源。
值得说明的是,上述只是对业务数据发生变化的一种举例,本发明实施例对业务数据的变化形式不进行限定。
第三种情况:当检测到通信通道异常时,清除指定业务数据的索引。
值得说明的是,在第一种情况下,在业务数据的发送端设备中避免了存储完整的业务数据和对同一份业务数据的多次存储,从而减少了***资源的浪费。在第二种情况下,避免了在缓存的同一业务数据中,对同一份业务数据执行添加、删除操作时,如果添加或删除的操作业务数据相同,这样就会使得数据接收端先添加再删除该业务数据,这样在业务数据的接收端执行无用动作,浪费***资源。
本发明另一实施例提供了一种控制数据发送的方法,该方法可以应用于传输业务数据的发送端设备,该发送端设备包括至少一个数据生产者模块,其中,数据生产者模块为待发送数据的生产者,优选为应用程序,数据生产者模块在需要与接收端设备的消费者模块进行通信时,首先与接收端设备建立通信通道,具体是与接收端设备的消费者模块建立通信通道;该数据生产者模块可以创建和初始化发送控制单元,并能够为创建的通信通道与发送控制单元建立关联,其中的通信通道和发送控制单元通过软件实现。
在本实施例中,数据生产者模块的数据产生单元,在获取到业务数据之后,能够根据业务数据的组织形式,生成业务数据的索引,且能够在业务数据发生变化时,根据业务数据的变换规律生成附加信息,该附加信息用于体现业务数据发生的变化,并将该业务数据的索引以及附加信息发送给发送控制单元,进而发送控制单元缓存获取到的索引以及附加信息,并按照预设调度规则,选取待发送业务数据的索引,并根据该索引从上述的数据生产者模块的数据产生单元处获取与该索引对应的业务数据,更进一步的,在获取到该待发送业务数据之后生成新的待发送数据,通过通信通道将新的待发送数据发送给接收端设备的消费者模块。本实施例中,发送端设备和接收端设备可以为同一设备,也可以为不同设备。
具体的,在本发明实施例中存在创建流程,即数据生产者模块初始化发送控制单元的实施例,创建通信通道和发送控制单元的流程。
首先,数据生产者模块初始化发送控制单元。
值得说明的是,在初始化该发送控制单元的同时,可以指定发送控制单元的调度方式,即指定预设调度规则。其中,该预设调度规则包括:发送控制单元自动根据通信通道的状况调度或者数据生产者模块根据需求手动调度。
其次,数据生产者模块调用通信通道接口,创建通信通道。
其中,通信通道接口可以为任何通信通道提供的接口,比如,进程间通信接口,报文发送接口等。
进一步的,数据生产者模块创建发送控制单元,并将通信通道与发送控制单元关联。
值得说明的是,在创建该发送控制单元时,还可以指定该发送控制单元是否需要创建待发送队列,该待发送队列用于存储根据业务数据的索引从数据生产者模块获取到的业务数据。此外还可以,在该发送控制单元上设置索引转换为数据回调、异常处理回调等回调接口。其中,索引转换为数据回调接口,通过调用该接口能够将索引转换为与该索引对应的实际要发送的数据;通过异常处理回调接口可以将通信通道的异常检测结果通知给数据产生单元,以使得数据生产者模块做出进一步处理。
则在完成上述的创建流程后,执行下述的业务数据发送流程,如图3所示,该流程包括:
301、数据生产者模块的数据产生单元产生业务数据。
注意,这里的数据产生单元产生业务数据,即是指数据产生单元获取业务数据,这种获取可以是数据生产者模块自身产生的业务数据,也可以是数据生产者模块接收到的业务数据。
302、数据产生单元根据业务数据的组织形式,生成业务数据的索引。
303、数据产生单元调用发送控制单元的发送索引接口,将该索引发送给发送控制单元,并由发送控制单元缓存该索引。
可选的,发送控制单元可以在发送索引队列中缓存接收到的索引。
可选的,值得说明的是,该发送索引的接口还可以发送附加信息。
进一步的,当数据产生单元还有其它业务数据时,继续执行上述301、302。
304、发送控制单元在检测到通信通道允许发送数据的时,按照预设调度规则,从缓存的索引中取一个业务数据的索引。
其中,获取的一个业务数据的索引即为待发送业务数据的索引。
305、发送控制单元调用数据产生单元注册的索引转换为数据回调接口,将取出来的索引转换为新的待发送数据。
306、发送控制单元通过通信通道发送该新的待发送业务数据。
具体的,在发送该业务数据时,包括以下两种形式:
第一种形式:将待发送的业务数据放入待发送队列,在通信通道允许发送业务数据时,在该待发送队列中取出该业务数据,经由通信通道发送该业务数据。
第二种形式:直接由通信通道发送该业务数据。
值得说明的是,由于数据产生单元与发送控制单元可能是异步处理的,因此在发送控制单元发送数据之前,对同一份业务数据,可能存在多次操作。当发送控制单元根据索引从数据产生单元获取业务数据时,就会获取到两份相同的业务数据,并将这些相同的业务数据发送给数据的接收端,这样由于需要存储并发送多相同的业务数据,就会导致***资源的浪费,为了避免这一问题的出现,当对待发送数据进行两次或者多次操作时,只保留一组待发送业务数据,并发送保留的待发送业务数据给业务数据的接收端。
比如,数据产生单元将生成的业务数据发生两次更新为例进行说明,如图4所示,在上述两次更新的场景下,消除重复数据的执行流程包括:
401、在业务数据的第一次更新时,数据产生单元将更新消息1发送给发送控制单元,发送控制单元在缓存的业务数据的索引中删除重复的索引。
402、在业务数据的第二次更新时,继续将更新消息2发送给发送控制单元,发送控制单元在缓存的业务数据的索引中删除重复的索引。
待发送业务数据的索引队列对同一份数据只保留一份,在发送控制单元从数据产生单元接收待发送业务数据的索引和附加信息后,当判断在预设缓存结构中保存有相同的待发送业务数据的索引时,以当前所接收的附加信息更新预设缓存结构中保存的待发送业务数据的索引对应的附加信息,以达到删除重复的索引的目的。
这样数据产生单元就向发送控制单元发送了两次更新请求,也就是在发送控制单元中会存储两次业务数据的索引,发送者根据业务数据的索引获取业务数据时,就会获取到两组相同的最新更新的业务数据,这就造成了业务数据的重复,这就需也就是说能够删除重复的一组业务数据。本发明实施例,每经过一次更新,都要进行依次删除重复的操作。
403、发送控制单元从数据产生单元请求获取业务数据。。
进一步的,当发送控制单元检测到通信通道异常时,会向数据产生单元报告异常,进而数据产生单元接收到异常后,进而会进入关闭或重启通信通道流程。
更进一步的,当重启通信通道,重新创建发送控制单元,并再次将通信通道与新的发送控制单元关联。
其中,通信通道异常包括:无法分配内存、通信通道断开。
值得说明的是,数据生产者模块还可以执行通信通道销毁流程,数据生产者模块调用销毁发送控制单元,即销毁与指定通信通道关联的发送控制单元,清除通信通道与发送实例之间的关系;进一步的,数据生产者模块调用接口,销毁通信通道。
本发明另一实施例提供的一种控制数据发送***的组成示意图,如图5所示,***包括发送端设备501和接收端设备502,接收端设备即为本发明实施例中的控制数据发送的装置,具体如图6所示。发送端设备包括至少一个数据生产者模块,接收端设备包括至少一个数据消费者模块。值得注意的是,对于本领域普通技术人员都清晰的知道发送端设备和接收端设备是一个相对的概念,对于同一个设备来说同时充当发送端设备和接收端设备的角色。即数据生产者模块也同理充当数据消费者的角色。在本发明实施例中,发送端设备和接收端设备可以为同一设备。
本发明另一实施例提供了一种控制数据发送的装置,如图6所示,该装置包括至少一个数据生产者模块600,数据生产者模块600,用于与接收端设备的消费者模块建立通信通道,并创建与接收端设备的消费者模块对应的发送控制单元601;发送控制单元601,用于当检测到通信通道允许发送业务数据时,依次根据缓存中的待发送业务数据的索引获取待发送业务数据,并生成新的待发送数据,通过通信通道,发送新的待发送数据到接收端设备。
数据生产者模块600还包括数据产生单元602,数据产生单元602,用于根据待发送业务数据生成待发送业务数据的索引,并发送至发送控制单元;还用于,根据待发送业务数据的操作指令,生成附加信息,将附加信息和根据待发送业务数据生成的待发送业务数据的索引一起,发送至发送控制单元,
发送控制单元601还用于,保存业务数据的索引至预设缓存结构中;其中,预设缓存结构至少包括:先进现出队列和树形结构。还用于,接收数据产生单元发送的附加信息以及待发送业务数据的索引并保存至预设缓存结构中,根据附加信息以及获取的待发送业务数据,生成通过通信通道发送的新的待发送数据。发送控制单元601还用于,从数据产生单元接收待发送业务数据的索引和附加信息后,当判断在预设缓存结构中保存有相同的待发送业务数据的索引时,以当前所接收的附加信息更新预设缓存结构中保存的待发送业务数据的索引对应的附加信息。
本发明实施例提供的控制数据发送的装置,当确定检测机制可以发送业务数据时,从缓存中确定待发送业务数据的索引,根据该待发送业务数据的索引获取与该索引对应的待发送数据,生成新的待发送数据,并通过通信通道发送该新的待发送数据。与现有技术中,发送端设备必须要缓存所有的待发送数据,并在通信通道允许的情况下,在发送这些数据相比,本发明实施例提供的技术方案,只需要缓存待发送数据的索引,索引的数据量小于与该索引对应的业务数据的数据量,从而显著缓解了资源浪费的问题,降低了***开销。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。