一种服务组的启停控制方法及装置与流程

文档序号:19878640发布日期:2020-02-08 06:43阅读:266来源:国知局
一种服务组的启停控制方法及装置与流程

本发明涉及进程管理技术领域,具体而言,涉及一种服务组的启停控制方法及装置。



背景技术:

大数据领域技术百花齐放,一个产品要实现海量数据的接入、存储、检索、分析等各种需求,通常需要许多组件以及大量业务进程、服务配合完成。不同开源组件的服务之间都具有一定的依赖关系,同时,业务服务之间以及业务服务对开源组件服务之间也有依赖关系。随着服务的增多,管理这些服务会变得异常复杂。

现有技术中,多个服务顺序依次启动,如果服务之间有依赖关系,则将被依赖的服务启动顺序前调;多个服务顺序依次停止,如果服务之间有依赖关系,则将被依赖的服务停止顺序后调,并且正常启动顺序或正常停止顺序均由人工确定,但这种方式存在以下几个缺点:一是由于顺序执行,服务组启停花费的时间跟服务数量成正比,服务较多时花费时间则较多;二是启动/停止顺序完全凭感觉手动调整,服务依赖较复杂时,调整起来很麻烦;三是单独启动/停止部分服务时,需要根据服务依赖关系重新整理服务启动/停止顺序;四是手动调整服务启停顺序不可靠,容易造成服务组启动失败,以及由于服务停止顺序不正确导致的数据丢失或损坏的问题。



技术实现要素:

有鉴于此,本发明的目的在于提供一种服务组的启停控制方法及装置,以解决上述问题。

为了实现上述目的,本发明实施例采用的技术方案如下:

第一方面,本发明实施例提供了一种服务组的启停控制方法,所述服务组的启停控制方法包括:

s1:遍历预建立的第一服务集合中的所有服务,将满足预设条件的服务确定为待处理服务;

s2:处理所述待处理服务并将所述待处理服务添加至预建立的第二服务集合中;

循环执行步骤s1以及步骤s2直至所述预建立的第一服务集合中不包含满足预设条件的服务为止。

第二方面,本发明实施例还提供了一种服务组的启停控制装置,所述服务组的启停控制装置包括:

待处理服务确定单元,用于遍历预建立的第一服务集合中的所有服务,将满足预设条件的服务确定为待处理服务;

处理单元,用于处理所述待处理服务并将所述待处理服务添加至预建立的第二服务集合中;

所述待处理服务确定单元及所述处理单元还用于交替运行直至所述预建立的第一服务集合中不包含满足预设条件的服务为止。

本发明实施例提供的服务组的启停控制方法,通过遍历预建立的第一服务集合中的所有服务,将满足预设条件的服务确定为待处理服务,接着处理待处理服务并将待处理服务添加至预建立的第二服务集合中,最后循环执行上述两个步骤直至预建立的第一服务集合中不包含满足预设条件的服务为止,以此实现服务组的启动或停止,从而显著提升对所有服务启停的时间花费,同时方便安全地单独启停服务组的部分服务,而不必关心进程间复杂的依赖关系,还能保证服务们按序启动/停止,避免了由于启动顺序不可靠造成的服务组启动失败或是因为停止顺序不正确导致的数据损坏和丢失的问题。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例提供的服务器的方框示意图。

图2示出了本发明实施例提供的服务组的启停控制方法的流程图。

图3示出了本发明实施例提供的服务组的启动控制方法的流程图。

图4示出了图3中步骤s303的具体流程图。

图5示出了本发明实施例提供的服务组的停止控制方法的流程图。

图6示出了图5中步骤s503的具体流程图。

图7示出了本发明实施例提供的服务组的依赖关系图。

图8示出了本发明实施例提供的服务组的启停控制装置的功能模块图。

图9示出了图8中待处理服务确定单元的具体功能模块图。

图10示出了图8中处理单元的具体功能模块图。

图标:100-服务器;111-存储器;112-处理器;113-通信单元;200-服务组的启停控制装置;210-判断单元;220-待处理服务确定单元;222-待启动服务确定子单元;224-待停止服务确定子单元;230-处理单元;232-启动子单元;234-停止子单元。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

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

请参照图1,是服务器100的方框示意图。所述服务器100包括服务组的启停控制装置200、存储器111、处理器112及通信单元113。

所述存储器111、处理器112以及通信单元113各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述服务组的启停控制装置200包括至少一个可以软件或固件(firmware)的形式存储于所述存储器111中或固化在所述服务器100的操作系统(operatingsystem,os)中的软件功能模块。所述处理器112用于执行所述存储器111中存储的可执行模块,例如所述服务组的启停控制装置200所包括的软件功能模块及计算机程序等。

其中,所述存储器111可以是,但不限于,随机存取存储器(randomaccessmemory,ram),只读存储器(readonlymemory,rom),可编程只读存储器(programmableread-onlymemory,prom),可擦除只读存储器(erasableprogrammableread-onlymemory,eprom),电可擦除只读存储器(electricerasableprogrammableread-onlymemory,eeprom)等。其中,存储器111用于存储程序或者数据。所述通信单元113用于通过所述网络建立所述服务器100与其它通信终端之间的通信连接,并用于通过所述网络收发数据。

应当理解的是,图1所示的结构仅为服务器100的结构示意图,所述服务器100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。

第一实施例

本发明实施例提供了一种服务组的启停控制方法,用于方便、快速、稳定地启动或停止服务组。

需要说明的是,服务组是由多个持续运行的对外提供服务的进程组成的一组服务。同时,服务组包含的多个服务具有依赖关系。例如,服务a依赖服务b,则表示要启动服务a的前提是服务b已经正常运行,否则服务a无法正常启动;反之,若要停止服务b的前提是服务a已经停止,否则会造成服务a的数据损坏或丢失。

请参阅图2,为本发明实施例提供的服务组的启停控制方法的流程图。该服务组的启停控制方法包括:

步骤s201:遍历预建立的第一服务集合中的所有服务以判断是否存在满足预设条件的服务,如果是,则执行步骤s202;如果否,则退出循环。

其中,预建立的第一服务集合包含了一组具有依赖关系的服务。例如,若需将一个服务添加入第一服务集合,则还需添加该服务所依赖的服务,如此循环,直至没有新的所依赖的服务被发现为止。

需要说明的是,服务之间的依赖关系是建立服务之初便已经设定好的。

步骤s202:将满足预设条件的服务确定为待处理服务。

需要说明的是,该预设条件与服务所需进行的处理有关。

步骤s203:处理待处理服务并将待处理服务添加至预建立的第二服务集合中。

其中,预建立的第二服务集合为服务组中已经进行处理的服务的集合。

对待处理服务进行具体的处理操作,例如启动或停止等。将待处理服务添加至预建立的第二服务集合中,从而更新第二服务集合,便于下一个处理循环进行。

需要说明的是,当预建立的第一服务集合中不包含满足预设条件的服务时,表明第一服务集合中所有的服务都已经进行处理完毕,也即第二服务集合与第一服务集合相同,因此退出循环。

还需要说明的是,由于步骤s201、步骤s202及步骤s203的具体步骤均与服务所需进行的处理有关,因此在后文中,将基于对服务进行的启动或停止处理,分别详细讲述步骤s201、步骤s202及步骤s203的具体步骤。

第一种:服务组的启动过程。请参阅图3,为本发明实施例提供的服务组的启动控制方法的流程图。该服务组的启动控制方法包括:

其中,需要说明的是,第二服务合集包括已启动服务集合。

步骤s301:遍历预建立的第一服务集合中所有的服务以判断是否存在不属于预建立的已启动服务集合且所依赖的服务属于预建立的已启动服务集合或不属于预建立的已启动服务集合且不依赖任何服务的服务,如果是,则执行步骤s302;如果否,则退出循环。

可以理解地,第一服务集合中包括需要启动的服务以及这些服务所依赖的服务。预建立的已启动服务集合中包括第一服务集合中所有已经启动完成的服务。

可以理解地,预设条件即为“不属于预建立的已启动服务集合且所依赖的服务属于预建立的已启动服务集合”或“不属于预建立的已启动服务集合且不依赖任何服务”。当满足上述任意一个预设条件时,均执行步骤s302;反之,上述两个条件均不满足时,则退出循环。

步骤s302:将不属于预建立的已启动服务集合且所依赖的服务属于预建立的已启动服务集合或不属于预建立的已启动服务集合且不依赖任何服务的服务确定为待启动服务。

当一个服务不属于预建立的已启动服务集合,表明该服务并不处于启动状态;同时,该服务所依赖的服务属于预建立的已启动服务集合,即处于已启动状态,因此此时可以正常启动该服务,从而将该服务确定为待启动服务。

当一个服务不属于预建立的已启动服务集合,表明该服务并不处于启动状态;同时,该服务不依赖任何服务,因此该服务的启动条件已经满足,因此,此时可以正常启动该服务,从而将该服务确定为待启动服务。

步骤s303:启动待启动服务并将待启动服务添加至预建立的已启动服务集合中。

请参阅图4,为步骤s303的具体流程图。该步骤s303包括:

子步骤s3031:调用预设定的服务启动命令以启动待启动服务。

具体地,调用startcmd指令可实现上述操作。

子步骤s3032:调用预设定的启动检查命令以检查待启动服务是否处于启动状态,如果是,则执行子步骤s3033;如果否,则重新执行子步骤s3032。

具体地,通过调用isreadycmd指令可实现上述操作。

子步骤s3033:将待启动服务添加至预建立的已启动服务集合中。

在待启动服务启动完成后,已启动的服务增加,因此将待启动服务添加至预建立的已启动服务集合中,以更新该已启动服务集合以便于下一个启动处理循环进行。

需要说明的是,随着已启动服务集合的不断更新,第一服务集合中不属于预建立的已启动服务集合且所依赖的服务属于预建立的已启动服务集合或不属于预建立的已启动服务集合且不依赖任何服务的服务越来越少,直至第一服务集合中不包含属于预建立的已启动服务集合且所依赖的服务属于预建立的已启动服务集合或不属于预建立的已启动服务集合且不依赖任何服务的服务时,服务组的启动过程完成。

第二种:服务组的停止过程。请参阅图5,为本发明实施例提供的服务组的停止控制方法的流程图。该服务组的停止控制方法包括:

其中,需要说明的是,第二服务合集包括已停止服务集合。

步骤s501:遍历预建立的第一服务集合中所有的服务以判断是否存在不属于预建立的已停止服务集合且被依赖的服务属于预建立的已停止服务集合的服务或不属于预建立的已停止服务集合且不被任何服务所依赖的服务,如果是,则执行步骤s502;如果否,则退出循环。

需要说明的是,某服务被依赖的服务,即为依赖某服务的服务。例如,服务a有一个被依赖的服务b,即为服务b依赖服务a。

可以理解地,第一服务集合中包括需要停止的服务以及这些服务所依赖的服务。

预建立的已停止服务集合中包括第一服务集合中所有已经处于停止状态的服务。

可以理解地,预设条件即为“不属于预建立的已停止服务集合且被依赖的服务属于预建立的已停止服务集合”或“不属于预建立的已停止服务集合且不被任何服务所依赖”。当满足上述任意一个预设条件时,均执行步骤s502;反之,上述两个条件均不满足时,则退出循环。

步骤s502:将不属于预建立的已停止服务集合且被依赖的服务属于预建立的已停止服务集合的服务或不属于预建立的已停止服务集合且不被任何服务所依赖的服务确定为待停止服务。

当一个服务不属于预建立的已停止服务集合时,表明其并非处于停止状态,同时,依赖它的服务属于预建立的已停止服务集合,即已经处于停止状态,此时将该服务停止并不会造成依赖它的服务的数据损坏或遗失,因此将该服务确定为待停止服务。

当一个服务不属于预建立的已停止服务集合时,表明其并非处于停止状态,同时,该服务不被任何服务所依赖,即没有任何一个服务依赖它,需要靠他维持正常工作状态,此时将该服务停止并不会造成任何数据损坏或遗失,因此将该服务确定为待停止服务。

步骤s503:停止待停止服务并将待停止服务添加至预建立的已停止服务集合中。

请参阅图6,为步骤s503的具体流程图。该步骤s503包括:

子步骤s5031:调用预设定的服务停止命令以停止待停止服务。

具体地,调用stopcmd指令可实现上述操作。

子步骤s5032:调用预设定的停止检查命令以检查待停止服务是否处于停止状态,如果是,则执行子步骤s5033;如果否,则重新执行子步骤s5032。

具体地,通过调用isstoppedcmd指令可实现上述操作。

子步骤s5033:将待停止服务添加至预建立的已停止服务集合中。

在待停止服务停止后,已停止的服务增加,因此将待停止服务添加至预建立的已停止服务集合中,以更新该已停止服务集合以便于下一个停止处理循环进行。

需要说明的是,随着已停止服务集合的不断更新,第一服务集合中不属于预建立的已停止服务集合且被依赖的服务属于预建立的已停止服务集合的服务或不属于预建立的已停止服务集合且不被任何服务所依赖的服务越来越少,直至第一服务集合中不包含不属于预建立的已停止服务集合且被依赖的服务属于预建立的已停止服务集合的服务或不属于预建立的已停止服务集合且不被任何服务所依赖的服务时,服务组的停止过程完成。

可以理解地,步骤s201包括步骤s301及步骤501;步骤s202包括步骤s302及步骤502;步骤s203包括步骤s303及步骤503。

请参阅图7,为服务组的依赖关系图。接下来,以图7的依赖关系图为例,对服务组的启动和停止过程进行详细说明。其中,图7中的每个节点代表一个服务,每个箭头指向节点代表其所依赖的服务。

需要说明的是,图7提供的依赖关系图仅作为一个示例,便于进行描述说明;事实上,服务组还可包括更多或更少的服务数,也各个服务之间的依赖关系也可依据实际应用情况而有所不同。

请结合参阅图3及图7,且并无任务服务事先启动,此时启动图3中的所有服务器100的流程如下:

需要说明的是,预建立的第一服务集合包括图7中所有的服务。

1)遍历所有服务,找到不依赖任何服务的所有服务:nginx,hdfs,zookeeper,es,pg,由5个线程分别启动,1个时间单位后,5个服务启动完毕。此时,已启动服务集合:set={nginx,hdfs,zookeeper,es,pg}。

2)继续寻找依赖的服务属于预建立的已启动服务集合,即除了已经启动的服务外,不依赖其他服务的服务:yarn,hbase,kafka,由3个线程分别启动,1个时间单位后,3个服务启动完毕。此时,已启动服务集合:set={nginx,hdfs,zookeeper,es,pg,yarn,hbase,kafka}。

3)继续寻找依赖的服务属于预建立的已启动服务集合,即除了已经启动的服务外,不依赖其他服务的服务:streaming,hiveserver,flume,thriftmaster,由4个线程分别启动,1个时间单位后,4个服务启动完毕。此时,已启动服务集合:set={nginx,hdfs,zookeeper,es,pg,yarn,hbase,kafka,streaming,hiveserver,flume,thriftmaster}。

4)继续寻找依赖的服务属于预建立的已启动服务集合,即除了已经启动的服务外,不依赖其他服务的服务:stk,jetty,thriftslave,由3个线程分别启动,1个时间单位后,3个服务启动完毕。此时,已启动服务集合:set={nginx,hdfs,zookeeper,es,pg,yarn,hbase,kafka,streaming,hiveserver,flume,thriftmaster,stk,jetty,thriftslave}。

可以理解地,完成上述所有服务的启动,仅需花费4个时间单位;而按照传统的启动方法,依次启动服务,则需花费数倍的时间,从而利用本发明提供的方法,能够有效减少启动服务所耗费的时间。

请结合参阅图5及图7,且并无任务服务事先停止,此时停止图3中的所有服务器100的流程如下:

需要说明的是,预建立的第一服务集合包括图7中所有的服务。

1)遍历所有服务,找到不被任何服务所依赖的所有服务:stk,thriftmaster,thriftslave,flume,由4个线程并行停止,1个时间单位后,这4个服务停止完毕。此时,已停止服务集合:set={stk,thriftmaster,thriftslave,flume}。

2)继续寻找被依赖的服务属于预建立的已停止服务集合的服务,即除了已经停止的服务外,不被任何服务依赖的服务:jetty,es,hbase,streaming,由4个线程并行停止,1个时间单位后,4个服务停止完毕。此时,已停止服务集合:set={stk,thriftmaster,thriftslave,flume,jetty,es,hbase,streaming}。

3)继续寻找被依赖的服务属于预建立的已停止服务集合的服务,即除了已经停止的服务外,不被任何服务依赖的服务:hiveserver,nginx,kafka,由3个线程并行停止,1个时间单位后,3个服务停止完毕。此时,已停止的服务集合:set={stk,thriftmaster,thriftslave,flume,jetty,es,hbase,streaming,hiveserver,nginx,kafka}。

4)继续寻找被依赖的服务属于预建立的已停止服务集合的服务,即除了已经停止的服务外,不被任何服务依赖的服务:yarn,zookeeper,pg,由3个线程并行停止,1个时间单位后,3个服务停止完毕。此时,已停止服务集合:set={stk,thriftmaster,thriftslave,flume,jetty,es,hbase,streaming,hiveserver,nginx,kafka,yarn,zookeeper,pg}。

5)继续寻找被依赖的服务属于预建立的已停止服务集合的服务,即除了已经停止的服务外,不被任何服务依赖的服务:hdfs,由1个线程停止,1个时间单位后,1个服务停止完毕。此时,已停止服务集合:set={stk,thriftmaster,thriftslave,flume,jetty,es,hbase,streaming,hiveserver,nginx,kafka,yarn,zookeeper,pg,hdfs}。

可以理解地,完成上述所有服务的启动,仅需花费5个时间单位;而按照传统的停止方法,依次停止服务,则需花费数倍的时间,从而利用本发明提供的方法,能够有效减少停止服务所耗费的时间。

第二实施例

请参阅图8,图8为本发明较佳实施例提供的一种服务组的启停控制装置200的功能模块图。需要说明的是,本实施例所提供的服务组的启停控制装置200,其基本原理及产生的技术效果和上述实施例相同,为简要描述,本实施例部分未提及之处,可参考上述的实施例中相应内容。该服务组的启停控制装置200包括判断单元210、待处理服务确定单元220以及处理单元230。

其中,判断单元210用于遍历预建立的第一服务集合中的所有服务以判断是否存在满足预设条件的服务。

具体地,判断单元210用于遍历预建立的第一服务集合中所有的服务以判断是否存在不属于预建立的已启动服务集合且所依赖的服务属于预建立的已启动服务集合或不属于预建立的已启动服务集合且不依赖任何服务的服务。

判断单元210还用于遍历预建立的第一服务集合中所有的服务以判断是否存在不属于预建立的已停止服务集合且被依赖的服务属于预建立的已停止服务集合的服务或不属于预建立的已停止服务集合且不被任何服务所依赖的服务。

可以理解地,在一种优选的实施例中,该判断单元210可用于执行步骤s201、步骤s301以及步骤s501。

待处理服务确定单元220用于遍历预建立的第一服务集合中的所有服务,将满足预设条件的服务确定为待处理服务。

可以理解地,在一种优选的实施例中,该待处理服务确定单元220可用于执行步骤s202。

具体地,请参阅图9,为待处理服务确定单元220的具体功能模块图。该待处理服务确定单元220包括待启动服务确定子单元222以及待停止服务确定子单元224。

其中,待启动服务确定子单元222用于将不属于预建立的已启动服务集合且所依赖的服务属于预建立的已启动服务集合或不属于预建立的已启动服务集合且不依赖任何服务的服务确定为待启动服务。

可以理解地,在一种优选的实施例中,该待启动服务确定子单元222可用于执行步骤s302。

待停止服务确定子单元224还用于将不属于预建立的已停止服务集合且被依赖的服务属于预建立的已停止服务集合的服务或不属于预建立的已停止服务集合且不被任何服务所依赖的服务确定为待停止服务。

可以理解地,在一种优选的实施例中,该待停止服务确定子单元224可用于执行步骤s502。

处理单元230用于处理待处理服务并将待处理服务添加至预建立的第二服务集合中。

可以理解地,在一种优选的实施例中,该处理单元230可用于执行步骤s203。

具体地,请参阅图10,为处理单元230的具体功能模块图。该处理单元230包括启动子单元232以及停止子单元234。

具体地,启动子单元232用于启动待启动服务并将待启动服务添加至预建立的已启动服务集合中。其中,启动子单元232用于调用预设定的服务启动命令以启动待启动服务,并调用预设定的启动检查命令以检查待启动服务是否处于启动状态,如果是,则将待启动服务添加至预建立的已启动服务集合中。

可以理解地,在一种优选的实施例中,该启动子单元232可用于执行步骤s303、子步骤s3031、子步骤s3032以及子步骤s3033。

停止子单元234用于停止待停止服务并将待停止服务添加至预建立的已停止服务集合中。其中,停止子单元234用于调用预设定的服务停止命令以停止待停止服务,并调用预设定的停止检查命令以检查待停止服务是否处于停止状态,如果是,则将待停止服务添加至预建立的已停止服务集合中。

可以理解地,在一种优选的实施例中,该停止子单元234可用于执行步骤s503、子步骤s5031、子步骤s5032以及子步骤s5033。

综上所述,本发明实施例提供的服务组的启停控制方法,通过遍历预建立的第一服务集合中的所有服务,将满足预设条件的服务确定为待处理服务,接着处理待处理服务并将待处理服务添加至预建立的第二服务集合中,最后循环执行上述两个步骤直至预建立的第一服务集合中不包含满足预设条件的服务为止,以此实现服务组的启动或停止,从而显著提升对所有服务启停的时间花费,同时方便安全地单独启停服务组的部分服务,而不必关心进程间复杂的依赖关系,还能保证服务们按序启动/停止,避免了由于启动顺序不可靠造成的服务组启动失败或是因为停止顺序不正确导致的数据损坏和丢失的问题。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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