数据获取方法、前台服务器和数据获取系统与流程

文档序号:13984469阅读:428来源:国知局
数据获取方法、前台服务器和数据获取系统与流程

本申请涉及互联网数据处理技术领域,特别涉及一种应用于前台服务器上的数据获取方法、前台服务器和数据获取系统。



背景技术:

目前,对着互联网业务的广泛开展,客户端与服务器之前的数据交互越来越多,服务器因此又可以划分为前台服务器和后台服务器,前台服务器可以通过提高人机交互界面与用户进行交互,并将用户请求转发给后台服务器,由后台服务器执行各种业务操作。

例如,在前台服务器需要配置数据的情况下,会通过程序中启动的进程向后台服务器请求数据,如果程序中启动的进程有多个,就有可能存在这多个进程同时向后台服务器请求配置数据的情况,在这种情况下,每一个进程都与后台服务器建立连接并通过该连接获取配置数据。



技术实现要素:

发明人在研究过程中发现,现有技术,每个进程之间是独立地去服务器获取数据,就会出现后台服务器与前台服务器之间建立多个连接来传输多个重复的配置数据的情况,这使得前台服务器和后台服务器之间的连接数量过多,从而不仅浪费网络带宽还耗费系统资源。

基于此,本申请提供了一种前台服务器获取数据的方法,用以减少前台服务器和后台服务器在传输同一个数据时的连接数量,进而节省网络带宽以及系统资源。

本申请还提供了一种前台服务器,用以保证上述方法在实际中的实现及应用。

本申请实施例提供的数据获取方法,该方法应用于前台服务器上,所述前台服务器中的主进程与后台服务器之间建立一个长连接,所述前台服务器上设置有共享内存区域;包括:

所述主进程从所述共享内存区域获取待更新的多个数据标识;

所述主进程通过所述长连接向后台服务器请求所述多个数据标识对应的多个数据内容,并将所述多个数据内容对应存储至所述共享内存区域;

多个从进程分别依据所述多个数据标识获取对应的数据内容。

其中,所述主进程从所述共享内存区域获取待更新的多个数据标识之前,还包括:

多个从进程分别将待更新的多个数据标识存储至所述共享内存区域。

其中,所述数据内容包括:数据值和有效时间;所述有效时间用于表示各个数据值分别对应的生效时长;所述主进程从所述共享内存区域获取待更新的多个数据标识,包括:

所述主进程判断所述共享内存区域中的数据标识是否有对应的数据内容,如果没有,则将没有对应的数据内容的数据标识确定为待更新的数据标识;

如果有,则判断对应的数据内容是否已经超过该数据内容的有效时间,如果超过,则将超过有效时间的数据内容对应的数据标识确定为待更新的数据标识。

其中,所述数据内容包括:数据值和有效时间;所述有效时间用于表示各个数据值分别对应的生效时长;所述共享内存区域对应一个共享版本号,所述共享版本号为所述共享内存区域中所有数据内容的统一版本号,则在所述共享内存区域中的任意一个或多个数据值有更新的情况下,还包括:

更新所述共享内存区域对应的共享版本号。

其中,所述多个从进程分别依据所述数据标识获取对应的数据内容,包括:

各个从进程分别判断已有数据的共享版本号与所述共享内存区域的共享版本号是否一致,如果共享版本号不一致,则判断已有数据的数据值与共享版本号对应的数据值是否相同,如果相同,则更新已有数据的共享版本号,如果不同,则获取共享内存区域中最新的共享版本号对应的数据值,并更新已有数据的共享版本号。

其中,所述数据内容还包括:数据版本号,所述数据版本号为各个数据的更新版本号;在所述共享内存区域中的任意一个或多个数据值有更新的情况下,还包括:

在所述共享内存区域中分别更新产生更新的数据值对应的数据版本号。

其中,所述判断已有数据的数据值与共享版本号对应的数据值是否相同,包括:

判断已有数据的数据版本号与共享内容区域中的数据版本号是否一致;以及,

在数据版本号不一致的情况下,还包括:

更新已有数据的数据版本号。

其中,所述前台服务器中包括处于被动状态的多个数据进程;则所述主进程和从进程通过以下方式确定:

在所述被动状态下所述多个数据进程判断定时器是否超时,如果是,则所述多个数据进程尝试获取控制锁;

获取控制锁成功的数据进程作为所述主进程进入控制状态,并执行所述前台服务器中的主进程与后台服务器之间建立一个长连接的步骤;

获取控制锁失败的数据进程作为从进程进入休眠状态,并在休眠状态下执行所述判断定时器是否超时的步骤。

本申请还公开了一种前台服务器,所述前台服务器包括主进程单元和多个从进程单元;所述前台服务器中的主进程单元与后台服务器之间建立一个长连接,所述前台服务器上设置有共享内存区域;

所述主进程单元包括第一获取子单元、请求子单元和存储内容子单元,所述第一获取子单元用于从所述共享内存区域获取待更新的多个数据标识,所述请求子单元用于通过所述长连接向后台服务器请求所述多个数据标识对应的多个数据内容,所述存储内容子单元用于将所述多个值对应存储至所述共享内存区域;

所述从进程单元包括第二获取子单元,所述第二获取子单元用于依据所述数据标识获取对应的数据内容。

其中,所述从进程单元还包括存储标识子单元,所述存储标识子单元用于分别将待更新的多个数据标识存储至所述共享内存区域。

其中,所述数据内容包括:数据值和有效时间;所述有效时间用于表示各个数据值分别对应的生效时长;所述存储标识子单元包括:

第一判断子单元,用于判断所述共享内存区域中的数据标识是否有对应的数据内容;

第一确定子单元,用于在所述第一判断子单元的结果为没有的情况下,将没有对应的数据内容的数据标识确定为待更新的数据标识;

第二判断子单元,用于在所述第一判断子单元的结果为有的情况下,判断对应的数据内容是否已经超过该数据内容的有效时间;

第二确定子单元,用于在所述第二判断子单元的结果为超过的情况下,将超过有效时间的数据内容对应的数据标识确定为待更新的数据标识。

其中,所述数据内容包括:数据值和有效时间;所述有效时间用于表示各个数据值分别对应的生效时长;所述共享内存区域对应一个共享版本号,所述共享版本号为所述共享内存区域中所有数据内容的统一版本号,在所述共享内存区域中的任意一个或多个数据值有更新的情况下,所述主进程单元还包括:

第一更新子单元,用于更新所述共享内存区域对应的共享版本号。

其中,所述第二获取子单元包括:

第三判断子单元,用于判断已有数据的共享版本号与所述共享内存区域的共享版本号是否一致;

第四判断子单元,用于在所述第三判断子单元的结果为否的情况下,判断已有数据的数据内容与共享版本号对应的数据内容是否相同;

第三获取子单元,用于在所述第四判断子单元的结果为否的情况下,则获取共享内存区域中最新的共享版本号对应的数据内容,并触发第二更新子单元;

第二更新子单元,用于在所述第四判断子单元的结果为是的情况下,或者,在被第三获取子单元触发的情况下,更新已有数据的共享版本号。

其中,所述数据内容还包括:数据版本号,所述数据版本号为各个数据的更新版本号;所述主进程单元还包括:

第三更新子单元,用于在所述共享内存区域中分别更新产生更新的数据值对应的数据版本号。

其中,所述第四判断子单元,具体用于:

判断已有数据的数据版本号与共享内容区域中的数据版本号是否一致;

则所述第二获取子单元还包括:

第四更新子单元,用于在所述第四判断子单元的结果为否的情况下,更新已有数据的数据版本号。

其中,所述前台服务器中包括处于被动状态的多个数据进程单元;则所述主进程单元和从进程单元通过以下方式确定:

在所述被动状态下所述多个数据进程单元判断定时器是否超时,如果是,则所述多个数据进程单元尝试获取控制锁;

获取控制锁成功的数据进程单元作为所述主进程单元进入控制状态;

获取控制锁失败的数据进程单元作为从进程单元进入休眠状态。

本申请还公开了一种数据获取系统,包括前述的前台服务器,和后台服务器;

其中,所述后台服务器用于依据所述前台服务器发送的数据标识,向所述前台服务器发送所述数据标识对应的数据内容。

与现有技术相比,本申请包括以下优点:

在本申请实施例中,预先在前台服务器中划分出一块共享内存区域,前台服务器的程序中执行的进程可能有多个,但是在同一个时刻,这多个进程中只有一个主进程与后台服务器建立连接,该主进程通过该连接向后台服务器请求的数据更新至共享内存区域中,其他的多个从进程就可以直接从共享内存区域中获取数据,与现有技术相比,在传输数据的时候不再需要每一个从进程都分别与后台服务器建立连接,因此,不仅节省了前台服务器与后台服务器之间建立的连接个数,还节省了网络带宽以及系统资源。

当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。

附图说明

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

图1是本申请在实际中的应用场景架构图;

图2是本申请的基于共享内存区域的主从状态图;

图3是本申请的数据获取方法实施例的流程图;

图4是本申请的前台服务器实施例的结构框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

图1为本申请在实际中的应用场景图。其中,后台服务器通过前台服务器与用户进行交互,后台服务器是面向业务的,也可以称为业务服务器,而前台服务器是面向用户,可以提供人机交互界面与用户进行数据交互的服务器。在图1中,本申请实施例可以预先在前台服务器上划分出一块共享内存区域,该共享内存区域可以为一块物理内存,主进程和多个从进程之间可以通过该共享内存区域进行数据共享。

参考图2所示,为本申请实施例中基于共享内存区域的主从状态图,即主进程和多个从进程之间的状态图。可以理解的是,在本申请实施例中主进程和从进程并无实质区别,都是在前台服务器上建立的独立进程,在某个时刻,获取控制锁(master锁)成功,则该进程就自动成为主进程,而其他进程就是本申请实施例中的从进程。

具体的,主从进程之间的状态转换流程如下:

步骤a1:进程启动后进入slave状态。

首先,在前台服务器启动一个或多个进程之后,该一个或多个进程在初始化(initial)之后进入被动(slave)状态。

步骤a2:在slave状态下,多个数据进程判断定时器是否超时,如果是,则多个进程尝试获取master锁,获取成功则进入步骤a3,获取失败则进入步骤a5。

在slave状态下,假设定时器超时,则各个进程尝试获取master锁,其中,定时器的超时时间可以预先设定,例如5ms等。

步骤a3:在slave状态下,获取进程锁成功的进程成为主进程进入控制状态,并建立与后台服务器之间的长连接,进入步骤a4。

具体的,获取进程锁成功的进程成为主进程进入控制状态,具体的,可以进入master状态下的更新(updating子状态),并由获取成功的进程更新共享内存区域。

在slave状态下,某个进程获取master锁成功,则该进程则自动成为本申请实施例中的主进程,该主进程与后台服务器建立一个长连接,并通过该长连接向服务器请求数据。可以理解的是,在多个进程都是刚刚进行初始化的时候,这多个进程中才会有一个进程随机获取到master锁,或者,在主进程释放master锁之后,多个从进程才会有一个进程随机获取到master锁。其中,由前台服务器通过主进程和从进程实现的数据获取流程在图3对应的实施例中进行详细介绍。

步骤a4:在master状态的updating子状态下,共享内存区域更新完成后主进程进入master的sleeping子状态;或者,在master状态下,主进程退出时释放master锁自动进入slave状态,进入步骤a6。

而主进程在updating子状态下,主进程对共享内存区域中的数据进行更新,在更新过程中,也可以设置一个定时器,例如5ms,在主进程判断得到共享内存区域没有待更新的数据标识的情况下,可以进入sleeping子状态,休眠5ms,并在定时器超时的情况下再判断共享内存区域中是否存在待更新的数据标识。可以理解的是,一旦某个进程获取到master锁,则一般情况下该主进程发生异常情况退出时,才会释放master锁。

步骤a5:获取控制锁失败的数据进程作为从进程进入休眠状态,并在休眠状态下执行所述判断定时器是否超时的步骤,进入步骤a6。

获取失败时该进程成为本申请实施例中的从进程,进入slave状态的休眠(sleeping)的子状态中,并在等待下次定时器超时的过程中可以实时判断,如果定时器超时则可以再尝试获取master锁。

步骤a6:在slave状态下从进程或主进程退出后结束主从状态切换流程。

而在slave状态下,不管是从进程,还是主进程释放master锁后自动进入了slave进程,只要进程退出都结束主从状态切换流程。

在介绍了本申请实施例中的主从进程之间的状态切换流程后,基于前台服务器上的数据获取流程图可以参考图3所示,图3示出了本申请一种前台服务器获取数据的方法实施例的流程图。具体的,本实施例中前台服务器预先划分出了一块共享内存区域,本实施例可以包括以下步骤:

步骤301:主进程与后台服务器建立一个长连接。

首先,前台服务器的程序中获取master锁成功的那个进程即为主进程,程序中的其他进程则为从进程。主进程首先与后台服务器建立一个长连接,通过该长连接,前台服务器和后台服务器之间可以连续发送多个数据包。

步骤302:多个从进程分别将待更新的多个数据标识存储至所述共享内存区域。

在程序启动后,未获取master锁的进程则为本申请实施例中的从进程,则多个从进程分别将待更新的多个数据标识,存储至共享内存区域。其中,数据标识用来唯一对应一个进程的数据内容。可以理解的是,步骤301和步骤302可以同时或者交互顺序执行,两者的顺序并不影响本申请实施例的实现。需要说明的是,在实际应用中,这多个从进程需要的数据可能是相同的,也有可能是不同的,不管这多个从进程需要相同的数据还是不同的数据,都可以采用本申请实施例实现数据获取。

步骤303:主进程从所述共享内存区域获取待更新的多个数据标识。

主进程可以先扫描共享内存区域,确认是否存在待更新的多个数据标识。其中,待更新的多个数据标识可以是共享内存区域中还没有对应的数据内容的数据标识,也可以是虽然有数据内容但是该数据内容已经超过有效时间的数据标识。

那么,在实际应用中,本步骤实现的具体方式可以包括步骤a1~步骤a5:

步骤a1:主进程判断所述共享内存区域中的数据标识是否有对应的数据内容,如果没有,则进入步骤a2;如果有,则进入步骤a3。

主进程首先检查共享内存区域中的数据标识是否存在对应的数据内容。在本实施例中,数据标识和数据内容的实现可以采用key-value的方式,key和value的大小可以由本领域技术人员自主设置,则主进程可以检查共享内存区域中的各个key是否存在对应的value。具体的,共享内存区域上可以建立一个hash表来存放key-value,获取数据标识的时候通过扫描整个hash表,来查看哪些数据标识超时或者哪些数据标识没有对应的据内容,则确定这些数据标识为待更新的数据标识,加入更新列表进行更新。

步骤a2:将没有对应的数据内容的数据标识确定为待更新的数据标识。

如果存在没有对应的数据内容的数据标识,则将这些数据标识确定为待更新的数据标识。

步骤a3:判断对应的数据内容是否已经超过该数据内容的有效时间,如果超过,则进入步骤a4。

如果数据标识已经对应存在数据内容,则主进程判断该数据内容是否已经超过有效时间。在本实施例中,数据内容可以包括:数据值和有效时间。其中,数据值就是数据本身,例如配置数据,而有效时间用于表示各个数据值分别对应的生效时长,该有效时间可以由后台服务器在向前台服务器发送数据内容的时候一并发送至前台服务器,并保存至共享内存区域。

步骤a4:将超过有效时间的数据内容对应的数据标识确定为待更新的数据标识。

如果数据内容超过有效时间,也认为该数据内容对应的数据标识为待更新的数据标识。

接着,在确定了待更新的数据标识之后,进入步骤304:

步骤304:主进程通过所述长连接向后台服务器请求所述多个数据标识对应的多个数据内容,并将所述多个数据内容对应存储至所述共享内存区域。

主进程在建立长连接之后,通过该长连接将待更新的数据标识发送给后台服务器,后台服务器根据接收到的数据标识返回对应这些数据标识的所有数据内容。其中,在实际应用中,前台服务器可以维护一个递增的共享版本号,每次在共享内存区域更新(包括增加、删除或者修改等)数据内容时则共享版本号加一,这样后续从进程就可以通过对共享版本号是否一致的判断,来确定自己是否需要更新数据内容。该共享版本号为所述共享内存区域中所有数据内容的统一版本号,共享内存区域中的所有数据内容的共享版本号都是相同的,用来表示其所存在的共享内容区域的更新时间。在实际应用中,则在共享内存区域中的任意一个或多个数据值有更新的情况下,在步骤304之后,还可以包括步骤b:

步骤b:更新所述共享内存区域对应的共享版本号。

在主进程将后台服务器发送的数据内容存储至共享内存区域之后,还可以更新前台服务器维护的共享内存区域的共享版本号,以便其他从进程根据共享版本号可以判断是否需要从共享内存区域中获取更新的数据。其中,因为共享版本号对应整个共享内存区域,所以只要共享内存区域中的数据内容存在更新,不管更新的数据内容是一个还是多个,都可以更新共享版本号。

在实际应用中还有另外一种情况,如果前台服务器为共享内存区域维护共享版本号的同时,后台服务器发送的数据内容除了数据值和有效时间之外,还包括了数据内容唯一对应的数据版本号。数据版本号即为各个数据的更新版本号,各个数据的数据版本号有可能是不同的,也有可能是相同的。则在执行步骤b的情况下,还可以执行步骤c:

步骤c:在所述共享内存区域中分别更新各个数据内容的数据版本号。

则如果数据内容对应的唯一的数据版本号,则在数据内容存在更新之后,需要将存在更新的数据内容的数据版本号也进行更新。具体的,数据版本号可以由数据值的md5值实现。例如,从进程检查自身的数据内容的md5值是否一致,如果不一致,则更新数据内容,并且更改数据版本号和共享版本号,如果一致,则仅仅更新共享版本号。

步骤305:多个从进程分别依据所述多个数据标识获取对应的数据内容。

接着,多个从进程根据之前存入共享内存区域的数据标识,来获取与存入的数据标识对应的数据内容。需要说明的是,多个从进程中有部分从进程可以获取同一个数据标识对应的数据内容,而其他部分从进程则可以分别获取到不同的数据标识对应的数据内容;或者,每个从进程获取的数据内容都是不同的;或者,所有的从进程都获取同一个数据标识对应的数据内容,等等,都是可以按照数据标识与数据内容的对应关系实现。

具体的,在共享内存区域中的所有数据内容仅对应了统一的共享版本号的情况下,步骤305具体可以包括步骤d1~步骤d4:

步骤d1:从进程分别判断已有数据的共享版本号与所述共享内存区域的共享版本号是否一致,如果否,则进入步骤d2。

在本申请实施例中,主进程和从进程都可以从共享内存区域中获取数据以及写入数据。从进程可以定时扫描共享内存区域,判断已经获取的数据内容的共享版本号是否与共享内存区域的共享版本号一致,如果不一致,说明共享内存区域中的某个或者某些数据存在更新,则进入步骤d2获取更新的数据。如果一致,则不需要执行后续流程。

步骤d2:各个从进程判断已有数据的数据值与共享版本号对应的数据值是否相同,如果相同,则进入步骤e3,如果不同,则进入步骤e4。

在共享版本号不一致的情况下,从进程再判断自己已有数据的数据值与共享内存区域中自己需要的数据值是否相同,如果不同,说明该从进程的数据值有更新,则进入步骤d4,如果相同,说明该从进程的数据值没有更新,则进入步骤d3。

具体的,判断数据值是否相同可以通过判断数据值的md5值实现,则、从进程可以分别判断各自已经获取到的数据值的md5值,与共享内容区域中自己需要的数据值的md5值是否一致。

步骤d3:更新已有数据的共享版本号。

如果共享内存中从进程的数据值没有更新,但是共享版本号又不一致,则从进程仅仅更新已有数据对应的共享版本号。

步骤d4:获取共享内存区域中最新的共享版本号对应的数据值,并更新已有数据内容的共享版本号。

如果该从进程在共享内存中对应的数据值有更新,则该从进程从共享内存区域中获取最新的共享版本号对应的数据值,并在更新数据值后同步更新该数据值的共享版本号。在数据内容还包括了数据版本号的情况下,本步骤中还需要更新数据版本号,例如md5值。

可见,在本申请实施例中,预先在前台服务器中划分出一块共享内存区域,前台服务器的程序中执行的进程可能有多个,但是在同一个时刻,这多个进程中只有一个主进程与后台服务器建立连接,该主进程通过该连接向后台服务器请求的数据更新至共享内存区域中,其他的多个从进程就可以直接从共享内存区域中获取数据,与现有技术相比,在传输数据的时候不再需要每一个从进程都分别与后台服务器建立连接,因此,不仅节省了前台服务器与后台服务器之间建立的连接个数,还节省了网络带宽以及系统资源。

为了更方便本领域技术人员理解本申请实施例,下面举出实际中的一个例子来详细描述本申请的实现过程,本例子可以包括以下步骤:

步骤f1:主进程与后台服务器建立一个长连接。

获得mater锁的主进程m与后台服务器建立一个长连接。

步骤f2:多个从进程分别将待更新的多个数据标识存储至所述共享内存区域。

本例子中有四个从进程分别为s1、s2、s3和s4,则该四个从进程分别将待更新的多个数据标识k1、k2和k3存储至共享内存区域。其中,s1和s4都需要数据标识为k1对应的数据内容v1,而s2需要的是数据标识k2对应的数据内容v2,而s3需要的是数据标识k3对应的数据内容v3。

步骤f3:主进程判断共享内存区域中的数据标识是否有对应的数据内容,如果没有,则进入步骤f4,如果有,则进入步骤f5。

主进程判断共享内存区域中的数据标识k1、k2和k3是否存在对应的数据内容v1、v2和v3,在本例子中,k3是从进程s3新写入的数据标识,没有对应的数据内容v3;而k1和k2是从进程s1、s4和s2已经写入的数据标识,都存在对应的数据内容v1和v2。

步骤f4:将没有对应的数据内容的数据标识k3确定为待更新的数据标识,进入步骤f7。

本步骤中主进程m将数据标识k3确定为待更新的数据标识。

步骤f5:判断对应的数据内容是否已经超过该数据内容的有效时间,如果超过,则进入步骤f6。

在本步骤中主进程m再判断k1和k2所对应的数据内容v1和v2是否已经超过有效时间,如果从某个数据内容的更新时间开始算,到达有效时间则表示该数据内容已经失效,未到达有效时间则表示该数据内容还有效。

步骤f6:将超过有效时间的数据内容对应的数据标识k1确定为待更新的数据标识。

其中,假设数据内容v1的有效时间为5分钟,而数据内容v2的有效时间为10分钟,则到当前时刻数据内容v1已经超过有效时间,而v2还未超过有效时间,则本步骤将数据内容v1对应的数据标识k1确定为待更新的数据标识。

步骤f7:主进程通过所述长连接向后台服务器请求数据标识k1和k3对应的数据内容v1和v3。

主进程通过与后台服务器建立的长连接向后台服务器请求数据标识k1和k3对应的数据内容v1和v3。服务器接收到k1和k3之后,将最新的数据内容v1和v3再通过该长连接发送给前台服务器的主进程,其中,v1和v3包括了各自的有效时间。

步骤f8:主进程将数据内容v1和v3对应存储至所述共享内存区域。

主进程再将接收到的v1和v3在共享内存区域与k1和k3分别对应存储。其中,v1和v3中的有效时间可以用来下一次判断该v1和v3是否已经超过有效时间。

步骤f9:更新所述共享内存区域对应的共享版本号。

在将v1和v3对应存储至共享内存区域之后,为了保证从进程可以根据共享版本号来判断是否需要获取数据内容v1和v3,则主进程将共享内存区域对应的共享版本号从“201607010003”更新为“201607010004”。当然,该共享版本号仅仅为示例。

步骤f10:从进程分别判断已有数据的共享版本号与所述共享内存区域的共享版本号是否一致,如果否,则进入步骤f11。

从进程s1、s2、s3和s4在定时扫描共享内存区域的时候发现其中的共享版本号存在更新,则s1、s2、s3和s4分别判断已经获取的数据内容对应的共享版本号是否与“201607010004”一致,因为步骤e9中更新了共享版本号,因此,在本步骤中从进程s1、s2、s3和s4的判断结果都为否。如果共享版本号没有更新,则说明各个从进程都不需要更新自己的数据。

步骤f11:各个从进程判断已有数据的数据版本号与共享内存中自身对应的数据版本号是否相同,如果相同,则进入步骤f12,如果不同,则进入步骤f13。

从进程s1和s4接着判断自己已有的数据内容v1与共享内存区域中自己的数据内容v1是否相同,从进程s2接着判断自己已有的数据内容v2与共享内存区域中的数据内容v2是否相同,从进程s3接着判断自己已有的数据内容v3与共享内存区域中的数据内容v3是否相同。

因为在步骤f8中数据内容v1和v3有更新,v2没有更新,因此,从进程s1、s4和s3的判断结果为不同,从进程s2的判断结果为相同。

步骤f12:更新已有数据的共享版本号。

从进程s2不需要从共享内存区域中获取到数据内容v2,只需要更新自己已有数据共享版本号为“201607010004”。

步骤f13:获取共享内存区域中最新的共享版本号对应的数据内容,并更新已有数据内容的共享版本号和数据版本号。

而从进程s1和s4则从共享内存区域中获得更新的数据内容v1,并更新自己的数据内容v1的共享版本号为“201607010004”。从进程s3则从共享内存区域中获得更新的数据内容v3,也更新自己的数据内容v3的共享版本号为“201607010004”。

此外,需要说明的是,共享版本号是由前台服务器维护的,对于每一个数据内容都包括的数据版本号,不再由前台服务器进行维护,而是通过后台服务器发送数据内容时,一并发送该数据内容的数据版本号(例如,数据内容的md5值)给前台服务器即可实施。

从本例子中可以看出,当多个从进程需要同样的数据内容时,可以通过一个长连接来从后台服务器一次获取该数据内容即可为这多个从进程所用,因为多个从进程可以从共享内存区域来同步更新自身的数据内容,不仅大大减少了前台服务器与后台服务器之间的连接个数,还能实现多个从进程之间数据共享的目的。即便多个从进程需要的是互不相同的数据内容,那么,也不需要像现有技术一样多个从进程分别和后台服务器建立多个连接,也可以通过一个长连接将各个从进程需要的数据内容一次发送给前台服务器获得。

对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

与上述本申请一种数据获取方法实施例所提供的方法相对应,参见图4,本申请还提供了一种前台服务器实施例,在本实施例中,该前台服务器与后台服务器之间建立一个长连接,所述前台服务器上设置有共享内存区域;所述前台服务器可以包括主进程单元和多个从进程单元;

所述主进程单元40可以包括第一获取子单元401、请求子单元402和存储内容子单元403,所述第一获取子单元401用于从所述共享内存区域获取待更新的多个数据标识,所述请求子单元402用于通过所述长连接向后台服务器请求所述多个数据标识对应的多个数据内容,所述存储内容子单元403用于将所述多个值对应存储至所述共享内存区域;

其中,所述数据内容可以包括:数据值和有效时间;所述有效时间用于表示各个数据值分别对应的生效时长;所述共享内存区域对应一个共享版本号,所述共享版本号为所述共享内存区域中所有数据内容的统一版本号,在所述共享内存区域中的任意一个或多个数据值有更新的情况下,所述主进程单元还可以包括:

第一更新子单元404,用于更新所述共享内存区域对应的共享版本号。

其中,所述数据内容也可以包括:数据值、所述数据内容的数据版本号和有效时间,所述数据版本号为各个数据的更新版本号,所述有效时间用于表示各个数据值分别对应的生效时长;所述主进程单元还可以包括:

第三更新子单元405,用于在所述共享内存区域中分别更新产生更新的各个数据值对应的数据版本号。

其中,所述从进程单元41可以包括第二获取子单元411,所述第二获取子单元411用于依据所述数据标识获取对应的数据内容。

所述从进程单元还可以包括存储标识子单元412,所述存储标识子单元412用于分别将待更新的多个数据标识存储至所述共享内存区域。

其中,所述存储标识子单元412可以包括:

第一判断子单元,用于判断所述共享内存区域中的数据标识是否有对应的数据内容;第一确定子单元,用于在所述第一判断子单元的结果为没有的情况下,将没有对应的数据内容的数据标识确定为待更新的数据标识;第二判断子单元,用于在所述第一判断子单元的结果为有的情况下,判断对应的数据内容是否已经超过该数据内容的有效时间;和,第二确定子单元,用于在所述第二判断子单元的结果为超过的情况下,将超过有效时间的数据内容对应的数据标识确定为待更新的数据标识。

其中,在主进程单元40还包括第一更新子单元404的情况下,所述第二获取子单元411可以包括:

第三判断子单元,用于判断已有数据的共享版本号与所述共享内存区域的共享版本号是否一致;和,第四判断子单元,用于在所述第三判断子单元的结果为否的情况下,判断已有数据的数据内容与共享版本号对应的数据内容是否相同;第三获取子单元,用于在所述第四判断子单元的结果为否的情况下,获取共享内存区域中最新的共享版本号对应的数据内容,并触发第二更新子单元;第二更新子单元,用于在所述第四判断子单元的结果为是的情况下,或者,在被第三获取子单元触发的情况下,更新已有数据的共享版本号。

其中所述第四判断子单元,具体用于判断已有数据的数据版本号与共享内容区域中的数据版本号是否一致;

则所述第二获取子单元还包括:

第五更新子单元,用于更新已有数据的数据版本号。

在本实施例中,预先在前台服务器中划分出一块共享内存区域,前台服务器的程序中执行的进程可能有多个,但是在同一个时刻,这多个进程中只有一个主进程与后台服务器建立连接,该主进程通过该连接向后台服务器请求的数据更新至共享内存区域中,其他的多个从进程就可以直接从共享内存区域中获取数据,与现有技术相比,在传输数据的时候不再需要每一个从进程都分别与后台服务器建立连接,因此,不仅节省了前台服务器与后台服务器之间建立的连接个数,还节省了网络带宽以及系统资源。

本申请实施例还可以包括一种数据获取系统,该数据获取系统可以包括前台服务器,和后台服务器;其中,所述后台服务器用于依据所述前台服务器发送的数据标识,向所述前台服务器发送所述数据标识对应的数据内容。其中,具体的前台服务器的介绍可以参考图4所示的实施例,在此不再赘述。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本申请所提供的数据获取方法及前台服务器进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

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