一种服务调用方法、装置、电子设备及存储介质与流程

文档序号:18823080发布日期:2019-10-09 01:06阅读:128来源:国知局
一种服务调用方法、装置、电子设备及存储介质与流程

本申请涉及应用技术领域,尤其涉及一种服务调用方法、装置、电子设备及计算机可读存储介质。



背景技术:

在企业级的应用场景中,应用的功能越来越多样化,一个应用往往集成有多个功能,从而形成一个应用的多个服务。通常,不同服务由于业务复杂度或业务量的不同,可能会有不止一个的实例,因此,在服务调用的过程中,如何确定调用目标服务的服务地址成为亟需解决的问题。目前确定服务地址的方案有如下三种:

一是通过硬编码的方式确定,预先将各服务地址编写到配置文件中,当调用服务时,可以通过访问配置文件的方式,确定调用服务的服务地址。

二是通过硬编码负载均衡设备或者软件确定,比如通过硬编码虚拟服务器(linuxvirtualserver,lvs)等负载均衡设备实现,具体地,只需对lvs的地址进行硬编码,当调用服务时,lvs可以根据预先配置的负载均衡策略确定各调用服务的服务地址。

三是通过域名查找的方式确定,具体地,将服务配置到域名系统中,当调用服务时,可以通过解析域名获取服务地址列表,进而确定调用服务的服务地址。

然而,由于上述方式通常只支持无状态服务(即接收到服务调用请求后,根据负载均衡策略随机选取一个服务实例,响应服务调用请求),无法附加服务的状态信息,若调用服务停止、不可用,则可能导致服务调用失败,难以实现故障转移。



技术实现要素:

本申请实施例提供一种服务调用方法,用以解决现有服务调用技术中,调用的服务实例不可用导致服务调用失败的问题。

本申请实施例还提供一种工服务调用装置,一种计算设备以及一种计算机可读存储介质。

本申请实施例采用下述技术方案:

第一方面,本申请实施例提供了一种服务调用方法,所述方法包括:

接收服务消费者的服务调用请求;

从服务提供者提供的可用服务实例中选择与所述服务调用请求对应的目标服务实例,其中,所述可用服务实例是基于服务提供者发送的服务心跳信息从服务实例配置表中存储的已注册服务实例中确定的;

将所述目标服务实例的服务地址发送给所述服务消费者,以便所述服务消费者根据所述服务地址进行服务调用。

第二方面,本申请实施例提供了一种服务调用装置,所述装置包括接收模块,选择模块和发送模块,其中:

接收模块,用于接收服务消费者的服务调用请求;

选择模块,用于从服务提供者提供的可用服务实例中选择与所述服务调用请求对应的目标服务实例,其中,所述可用服务实例是基于服务提供者发送的服务心跳信息从服务实例配置表中存储的已注册服务实例中确定的;

发送模块,用于将所述目标服务实例的服务地址发送给所述服务消费者,以便所述服务消费者根据所述服务地址进行服务调用。

第三方面,本申请实施例提供了一种计算设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的任意一种服务调用方法的步骤。

第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的任意一种服务调用方法的步骤。

本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:

采用本申请实施例提供的方法,增加了服务心跳机制,使得可以基于服务心跳信息从服务配置表中选取出可用服务实例,这样一来,当接收到服务消费者的服务调用请求后,可以从可用服务实例中选择出与服务调用请求对应的目标服务实例,而由于可用服务实例中的服务实例均是处于可用状态的,因此,保证了被调用服务实例的可用性,从而解决了现有服务调用技术的问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1a为本申请实施例提供的一种具备服务调用功能的服务器的服务架构示意图;

图1b为本申请实施例提供的服务调用方法的实现流程示意图;

图2为本申请实施例提供的服务调用方法的实现流程示意图;

图3为本申请实施例提供服务调用装置的具体结构示意图;

图4为本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

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

以下结合附图,详细说明本申请各实施例提供的技术方案。

实施例1

为解决现有服务调用技术中,调用的服务实例不可用,导致服务调用失败的问题,本申请实施例提供一种服务调用方法。

该方法的执行主体,可以是各种类型的电子设备,比如可以是台式计算机、膝上型计算机、笔记本电脑、台式计算机、便携式媒体播放器、计步器、导航装置、蜂窝电话、智能电话、智能手表、可佩戴计算设备或可植入计算设备等用户终端,也可以是服务器等。

为便于描述,本申请实施例以该方法的执行主体为具备服务调用功能的服务器为例,对该方法进行介绍。本领域技术人员可以理解,本申请实施例以具备服务调用功能的服务器为例对方法进行介绍,仅是一种示例性说明,并不对本方案对应的权利要求保护范围构成限制。

为了方便描述,后续将具备服务调用功能的服务器简称为服务器。

以下对服务器的服务架构作简单说明:

如图1a所示,本申请中,可以按照服务器的实现功能,将服务器分为持久化层、服务策略层、远程过程调用协议(remoteprocedurecallprotocol,rpc)适配层、服务注册/发现接口以及连接池&context参数等五部分。

其中,持久化层可以用于存储服务实例的配置信息,例如,服务实例的服务名称、服务地址、服务功能信息、服务过期时间、通信协议、服务接口等。

需要说明的是,服务实例的服务名称,也即服务实例的标识信息,用于唯一标识服务实例;服务实例的服务名称,可以根据服务实例能够实现的功能进行命名,例如,某一服务实例的功能是计时,则可以根据其计时功能将该微服务命名为jishifuwushili,同时,当一个计时服务有多个服务实例时,可以结合数字编号进行命名,例如,命名为jishifuwushili-1和jishifuwushili-2。服务地址,即该服务实例的ip地址;服务实例的功能信息,用于指示服务实例的功能,服务实例功能信息也可以用功能标识进行表示,例如,凡是提供计时功能的服务实例,其功能标识为jsfw,凡是提供蜂鸣功能的服务实例,其功能标识为nzfw。

持久化层中包括用于存储服务实例配置信息的存储中间件etcd、consul以及zookeeper。

其中,etcd、consul以及zookeeper均是分布式协调框架,可以实现服务注册。服务器启动后与etcd、consul以及zookeeper中的任意一种分布式协调框架建立长连接,用于存储与服务实例相关的元数据。

服务注册接口,可以用于对服务提供者的服务实例进行注册。

服务发现接口,可以用于查找与服务调用请求相对应的服务实例。

服务策略层,可以用于实现服务调用;其中,服务策略层具体包括:配置下发模块、服务注册模块、服务订阅模块、服务探活模块以及各种服务调用策略模块,比如,负载均衡策略模块、高可用策略模块。

rpc适配层,可以用于对远程过程调用协议进行适配。

连接池&context参数,用于保证服务器与分布式协调框架的长连接。

具体地,本申请实施例提供的该方法的实现流程如图1b所示,包括如下步骤:

步骤11,接收服务消费者的服务调用请求;

其中,服务调用请求中可以包括用于唯一标识需求服务实例的服务信息,比如,需求服务实例的服务名称等,以便服务器根据服务调用请求,确定目标服务实例。所述服务实例的服务名称,可以是根据服务实例能够实现的功能进行命名的,例如,某一服务实例的功能是计时,则可以根据其计时功能将该微服务命名为jishifuwushili,同时,当一个计时服务有多个服务实例时,可以结合数字编号进行命名,例如,命名为jishifuwushili-1和jishifuwushili-2。

步骤12,从服务提供者提供的可用服务实例中选择与服务调用请求对应的目标服务实例,其中,所述可用服务实例是基于服务提供者发送的服务心跳信息从服务实例配置表中存储的已注册服务实例中确定的;

需要说明的是,服务实例配置表中还可以存储但不限于已注册的各服务实例的服务名称、服务地址、服务功能信息、服务过期时间、通信协议、服务接口等信息。

本申请实施例中,从服务提供者提供的可用服务实例中选择与服务调用请求对应的目标服务实例之前,还包括:

接收服务提供者发送的服务心跳信息;

其中,服务心跳信息可以由数字和/或字符和/或字母组成。

确定服务心跳信息的发送时间以及预设发送时间间隔。

其中,预设发送时间间隔通常可以通过服务实例过期时间(timetolive,ttl)确定。

在一个实施例中,步骤12具体可以通过如下方法实现:

步骤121,基于所述服务调用请求,确定所需调用服务的服务名称;

例如,服务器接收到服务调用请求后,可以通过服务发现接口,比如,serviceconfiggetserviceconfig(stringservicename),基于服务调用请求,确定所需调用服务的服务名称。

步骤122,根据服务名称,从可用服务实例中查找与服务名称匹配的至少一个服务实例;

例如,假设确定所需调用服务的服务名称为“test”,则可以继续通过服务发现接口,比如serviceconfiggetserviceconfig,从可用服务实例中查找与服务名称匹配的至少一个服务实例。

具体地,例如可以是在服务发现接口输入对应的查询请求servicediscovery/getserviceconfig?servicename=“test”。

或者,本申请实施例中还可以基于restful接口,根据服务名称,从可用服务实例中获取与服务名称匹配的至少一个服务实例。

需要说明的是,在执行步骤122之前,可以采用如下方式先从服务实例配置表中确定出可用服务实例:

首先,根据服务提供者提供的服务实例的配置信息进行服务注册,得到服务实例配置表;

其中,服务实例的配置信息可以但不限于包括服务实例的服务名称、服务地址、服务功能信息、服务过期时间、通信协议、服务接口信息等。

本申请实施例中,可以但不限于通过服务器的服务注册接口或者软件开发工具包,比如(softwaredevelopmentkit,sdk)的注册接口,对服务提供者提供的服务实例的配置信息进行服务注册。

此外,由于服务提供者提供的服务实例可能会由于服务器重启、服务器扩容等情况,出现服务实例信息丢失的问题,因此,本申请实施例中,为避免上述情况,对服务提供者提供的服务实例的配置信息进行服务注册时,可以将服务实例的配置信息存储至服务器的持久层中,以便可以实时备份、维护服务实例的服务信息。

其中,用于存储服务实例配置信息的存储中间件,例如可以但不限于是etcd、consul、zookeeper等,通过这些存储中间件,具备调用功能的服务器可以实现水平扩展。

在一个实施例中,为了方便后续存储中间件的扩展替换,还可以将服务注册接口、服务发现接口进行抽象化。

其次,基于服务提供者发送的服务心跳信息,确定服务实例配置表中各已注册服务实例当前的状态;其中,状态包括可用状态和不可用状态;

其中,可用状态即可以保证服务实例正常工作,能够进行服务调用的状态;反之,即为不可用状态,例如,服务实例下线、服务实例停用、服务实例过期/失效、服务实例异常等状态即可称为不可用状态。

需要说明的是,本申请实施例中,基于服务提供者发送的服务心跳信息,确定服务实例配置表中各已注册服务实例当前的状态,可以对服务实例配置表中的服务实例的状态进行定时更新,以保证服务实例配置表中的服务实例均可用,避免调用过程中出现由于调用服务实例处于不可用状态,而仍然对该服务实例进行调用,从而导致服务调用失败的问题。。

本申请实施例中,确定服务实例的状态时,例如,可以基于服务提供者发送的服务心跳信息,通过判断服务心跳信息中的发送时间间隔是否超过预设发送时间间隔,进而确定服务实例配置表中各服务实例当前的状态。

具体地,若服务心跳信息中的发送时间间隔超过预设发送时间间隔,则确定服务心跳信息对应的服务实例当前处于不可用状态;

若服务心跳信息中的发送时间间隔未超过预设发送时间间隔,则确定服务心跳信息对应的服务实例当前处于可用状态。

例如,假设服务提供者a上次发送服务心跳的时间为"2018-07-3119:20:00",预设发送时间间隔ttl为10秒,则若服务提供者a下次发送服务心跳的时间超过2018-07-3119:20:10,则判断服务提供者a对应的服务实例处于不可用状态。

此外,确定服务实例配置表中各服务实例当前的状态时,为了避免由于网络抖动,使得服务器未接收到服务提供者发送的服务心跳信息,进而误判断服务实例状态的问题,本申请实施例中,确定服务实例状态时,还可以结合服务器在预设发送时间间隔内未接收到服务心跳信息的次数进行判断,当连续未接收到服务心跳信息的次数超过预设次数时,再确定服务心跳信息对应的服务实例当前处于不可用状态。

最后,根据各已注册服务实例当前的状态,从服务实例配置表中确定当前处于可用状态的服务实例。

在一个实施例中,可以将处于不可用状态的服务实例从服务实例配置表中移除,从而确定出当前处于可用状态的服务实例。

具体地,例如服务器可以预先通过zookeeper选举产生leader节点,leader节点将所有处于不可用状态的服务实例从服务配置表中移除。

需要说明的是,上述通过zookeeper选举产生leader节点,并由leader节点将所有处于不可用状态的服务实例从服务配置表中移除,仅是一种示例性说明,并不对本申请实施例造成任何限定。本申请实施例中,比如还可以通过etcd、consul等存储中间件将处于不可用状态的服务实例从服务配置表中移除。

其中,将处于不可用状态的服务实例从服务实例配置表中移除可以是暂时性的,等到服务实例的服务状态恢复正常时,再将该服务实例加入服务实例配置表中。

具体地,可以采用服务实例探活策略持续探活移除的服务实例的服务状态,直到该服务实例的服务状态恢复正常时,再将该服务实例加入服务实例配置表中。

步骤123,根据负载均衡策略,从与所述服务名称匹配的至少一个服务实例中选择一个作为所述目标服务实例。

其中,可用服务实例是基于服务提供者发送的服务心跳信息从服务实例配置表中确定的可用服务实例。

执行步骤122后,若从可用服务实例中查找到多个与服务名称匹配的可用服务实例,则可以通过服务发现接口从服务实例配置表获取多个与服务名称匹配的可用服务实例的配置信息,然后根据负载均衡策略以及可用服务实例的配置信息,选择一个与服务调用请求对应的目标服务实例。

例如,沿用上例,假设在服务发现接口输入对应的查询请求servicediscovery/getserviceconfig?servicename=“test”后,服务发现接口返回与目标服务实例的服务名称匹配的可用服务实例test1、test2,以及对应的配置信息:

则可以根据负载均衡策略,即服务实例对应的权重,选择test1作为目标服务实例。

本申请中,根据负载均衡策略以及可用服务实例的配置信息,从多个与服务名称匹配的可用服务实例中,选择一个与服务调用请求对应的目标服务实例的方式,可以节约服务器的资源,保证其他服务消费者调用同样服务名称的服务实例时,还有剩余的可用服务实例可以被调用。

或者,在一个实施例中,若根据服务名称,从可用服务实例中只查找一个与服务名称匹配的服务实例,则可以直接将该可用服务实例确定为与服务调用请求对应的目标服务实例。

步骤13,将目标服务实例的服务地址发送给服务消费者,以便服务消费者根据服务地址进行服务调用。

本申请实施例中,通过步骤12从可用服务中选择出与服务调用请求对应的目标服务实例后,可以通过持久层从服务实例配置表中查找出与该目标服务实例对应的服务地址,并将该服务地址发送给服务消费者,以便服务消费者根据服务地址进行服务调用。

采用本申请实施例提供的方法,增加了服务心跳机制,使得可以基于服务心跳信息从服务配置表中选取出可用服务实例,这样一来,当接收到服务消费者的服务调用请求后,可以从可用服务实例中选择出与服务调用请求对应的目标服务实例,而由于可用服务实例中的服务实例均是处于可用状态的,因此,保证了被调用服务实例的可用性,从而解决了现有服务调用技术的问题。

实施例2

为解决现有服务调用技术中,由于无法附加服务实例的状态信息,因此,若调用的服务实例不可用,则可能导致服务调用失败,难以实现故障转移的问题,本申请实施例提供了一种服务调用方法的具体实施案例之一,实施流程如图2所示。

本申请实施例提供的服务调用方法中,包括两部分:服务注册、服务发现。其中,执行主体为具备调用功能的服务器,为方便描述以下统称为服务中心。

其中,服务中心包括路由器db、服务注册接口、存储中间件etcd、consul、zookeeper等组件。

步骤21,通过注册接口,将服务提供者对应的服务实例注册到注册中心;图2中简单描述为将服务提供者对应的服务实例注册到注册中心。

本申请实施例中,服务注册模块可以基于etcd、consul、zookeeper中任意一种框架自动注册服务。其中,该服务注册模块对旧代码无侵入性,适用于etcd、consul、zookeeper中任意一种框架的系统,具有普适性,提高了系统重构的安全性,减少了工作人员的开发量。

步骤22,接收服务提供者定时发送服务心跳请求,并且根据服务心跳请求确定服务提供者对应的服务实例当前的状态;图2中,为方便描述简称为接收服务提供者定时发送服务心跳请求。

本申请实施例中,通过添加服务心跳机制,确定服务提供者对应的服务实例当前的状态,可以保证服务的高可用。

其中,根据服务心跳请求,确定服务提供者对应的服务实例当前的状态的具体步骤可以参照实施例1的相关部分,此处不再赘述。

步骤23,接收服务消费者发送的服务调用请求,并根据服务调用请求从可用服务配置信息表中确定与服务调用请求对应的可用服务实例,图中为方便描述简称为根据负载均衡策略,选择目标服务实例;具体地,可以根据如下步骤实现:

步骤231,确定服务调用请求中所需调用服务的服务名称;

例如,服务器接收到服务调用请求后,可以通过服务发现接口,比如,serviceconfiggetserviceconfig(stringservicename),确定服务调用请求中所需调用服务的服务名称。

步骤232,根据服务名称,从可用服务实例中查找与服务名称匹配的至少一个服务实例;

例如,假设确定目标服务实例的服务名称为“test”,则可以继续通过服务发现接口,比如serviceconfiggetserviceconfig,从可用服务实例中查找与服务名称匹配的至少一个服务实例。

具体地,例如可以是在服务发现接口输入对应的查询请求servicediscovery/getserviceconfig?servicename=“test”。

或者,本申请实施例中还可以基于restful接口,根据服务名称,从可用服务实例中获取与服务名称匹配的至少一个服务实例。

步骤24,根据负载均衡策略,从与所需调用服务的服务名称匹配的至少一个可用服务实例中选择一个与服务调用请求对应的作为目标服务实例。

步骤25,建立服务器与分布式协调框架的长连接,并通过连接将目标服务实例对应的服务地址发送给服务消费者,以便服务消费者进行服务调用。

采用本申请实施例提供的方法,增加了服务心跳机制,使得可以基于服务心跳信息从服务配置表中选取出可用服务实例,这样一来,当接收到服务消费者的服务调用请求后,可以从可用服务实例中选择出与服务调用请求对应的目标服务实例,而由于可用服务实例中的服务实例均是处于可用状态的,因此,保证了被调用服务实例的可用性,从而解决了现有服务调用技术的问题。

实施例3

为解决现有服务调用技术中,由于无法附加服务实例的状态信息,因此,若调用的服务实例不可用,则可能导致服务调用失败,难以实现故障转移的问题,本申请实施例提供一种服务调用装置30,该装置的具体结构示意图如图3所示,包括接收模块31、选择模块32以及发送模块33。各模块的功能如下:

接收模块31,用于接收服务消费者的服务调用请求;

选择模块32,用于从服务提供者提供的可用服务实例中选择与所述服务调用请求对应的目标服务实例,其中,所述可用服务实例是基于服务提供者发送的服务心跳信息从服务实例配置表中存储的已注册服务实例中确定的;

发送模块33,用于将所述目标服务实例的服务地址发送给所述服务消费者,以便所述服务消费者根据所述服务地址进行服务调用。

本申请实施例中,选择模块具体包括注册单元、第一确定单元以及第二确定单元。其中,各单元的功能如下:

注册单元,用于根据所述服务提供者的服务实例的配置信息进行服务注册,得到所述注册后的服务实例配置表;

第一确定单元,用于基于所述服务提供者发送的服务心跳信息,确定所述服务实例配置表中各已注册服务实例当前的状态;其中,所述状态包括可用状态和不可用状态;

具体地,基于服务提供者发送的所述服务心跳信息,判断服务心跳信息中的发送时间间隔是否超过预设发送时间间隔;

若是,则确定服务心跳信息对应的服务实例当前处于不可用状态;

若否,则确定服务心跳信息对应的服务实例当前处于可用状态。

第二确定单元,用于根据所述各已注册服务实例当前的状态,从所述服务实例配置表中确定当前处于可用状态的服务实例。

本申请实施例中,选择模块,具体用于:

确定服务调用请求中所需调用服务的服务名称;

根据服务名称,从可用服务实例中查找与服务名称匹配的至少一个服务实例;

根据负载均衡策略,从与服务名称匹配的至少一个可用服务实例中选择一个作为目标服务实例。

需要说明的是,由于本申请实施例与实施例1的发明构思相同,因此,采用本申请实施例提供的服务调用装置,也能够解决现有技术中存在的问题,此处不再赘述。

实施例4

可选的,图4示出了服务调用电子设备40的硬件结构框图,参照图4,该服务调用设备可以包括:处理器41,通信总线42,通信接口43,存储器44;

其中处理器41、通信接口43、存储器44通过通信总线42完成相互间的通信;

可选的,通信接口43可以为通信模块的接口,如gsm模块的接口;

处理器41,用于执行程序;存储器44,用于存放程序;程序可以包括程序代码,所述程序代码包括计算机操作指令。

处理器41可能是一个中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。

存储器44可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。

其中,程序可具体用于:

接收服务消费者的服务调用请求;

从服务提供者提供的可用服务实例中选择与所述服务调用请求对应的目标服务实例,其中,所述可用服务实例是基于服务提供者发送的服务心跳信息从服务实例配置表中存储的已注册服务实例中确定的;

将所述目标服务实例的服务地址发送给所述服务消费者,以便所述服务消费者根据所述服务地址进行服务调用。

可选的,基于服务提供者发送的服务心跳信息从服务实例配置表中确定可用服务实例,包括:

根据所述服务提供者提供的服务实例的配置信息进行服务注册,得到所述服务实例配置表;

基于所述服务提供者发送的服务心跳信息,确定所述服务实例配置表中各已注册服务实例当前的状态;其中,所述状态包括可用状态和不可用状态;

根据所述各服务实例当前的状态,从所述服务实例配置表中确定当前处于可用状态的服务实例。

可选的,基于所述服务提供者发送的服务心跳信息,确定所述服务实例配置表中各已注册服务实例当前的状态,包括:

基于所述服务提供者发送的所述服务心跳信息,判断所述服务心跳信息中的发送时间间隔是否超过预设发送时间间隔;

若是,则确定所述服务心跳信息对应的服务实例当前处于不可用状态;

若否,则确定所述服务心跳信息对应的服务实例当前处于可用状态。

基于所述服务调用请求,确定所需调用服务的服务名称;

根据所述服务名称,从所述可用服务实例中查找与所述服务名称匹配的至少一个服务实例;

根据负载均衡策略,从与所述服务名称匹配的至少一个服务实例中选择一个作为所述目标服务实例。

除此,本申请还提供的服务调用设备还可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

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

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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