具体实施方式
下面结合附图对本发明实施例的具体实施方式做进一步的详细阐述。
现有技术由于新增的接口是对原有老接口的功能的增强,因此,在使用IDL描述新接口时,为所述新接口定义的代码中需要存在大量定义的与老接口相同的代码,因此,为新接口定义存在大量重复的代码,因此调用时由于定义新接口的代码冗余而处理繁琐,并且维护不便。而且,如果服务器端的软件升级后,客户端的软件也要一起升级,这样客户端才能按照和服务器端配套的约定方法调用接口。因此,现有技术会使系统升级的工作量很大。
本发明实施例公开了一种分布式系统的接口调用方法,该实施例采用IDL定义接口,在升级后的接口定义IDL中增加对方法参数的默认值的识别,这样,在收到客户端发送的接口调用请求消息时,能够根据接收的接口调用请求消息中是否包含该IDL默认参数的数值来确定所述客户端是否为升级后的新客户端。如图1所示,为本发明实施例一种分布式系统的接口调用方法流程示意框图。
S101:在使用IDL语言定义接口调用方法的程序时,为该程序中的方法参数设置默认参数、以及该默认参数的默认值,并且还设置“可以为该默认参数指定除默认值外的其他数值”的属性。这样,对于升级后的新客户端在调用这个方法程序时,可以为该IDL默认参数设定一个默认值以外的其他数值。
例如,在doRequest方法的定义中,增加了一个参数默认值设置:
interface IBaseSession{
void doRequest(in TXCAPMessage req,in string address=“”);
oneway void doResponse(in TXCAPMessage resp);
oneway void close();
oneway void doError(in short errorCode);
};
其中,“address=”为本发明实施例设置的默认参数,该默认参数的数值可以为指定的默认值,或者还可以为客户端任意设置的一个数值。当为默认值时,该默认参数的数值可以不添,此时则表示为默任值。
其中,IDL编译器编译带有默认参数的IDL语言时,所述默认参数的默认值可保存在服务器端的skeleton(IDL编译器生成的服务端骨架)中。
S102:服务器端当收到客户端发送的接口调用请求消息后,从该接口调用请求消息中读取每个IDL语言中默认参数的值,如果默认参数没有指定的数值,则执行S103;否则,执行S106。
S103:服务器端判断自身上的skeleton中是否保存有所述IDL默认参数的默认值,如果没有,则执行S104;否则,执行S105。
S104:调用失败,向客户端返回异常响应。
S105:则说明该客户端为没有升级的老客户端,此时使用自身保存的所述IDL默认参数的默认值来调用所述客户端请求使用的接口,来通过该接口定义的功能实现相应的应用。
S106:则说明该客户端为升级后的新的客户端,此时,使用所述接口调用请求消息中该IDL默认参数的数值来调用该客户端请求使用的接口。
上述实施例中,由于在IDL中设置了默认参数和默认值,这样,当客户端发送的接口调用请求消息中如果有IDL默认参数指定的数值时,则该客户端为升级后的新客户端,此时,服务器端使用所述接口调用请求消息中指定的数值调用相应的接口实现后续的操作;若接口调用请求消息中默认参数没有指定的IDL默认值,那么该IDL默认参数的默认数值如果在服务器端有保存,那么该客户端为未升级的老的客户端,此时,服务器端则使用默认数值来调用需要的接口。可见,本发明通过识别IDL默认参数的数值来实现对新客户端和老客户端的区分操作,避免了现有技术中因服务器端系统升级而引起的客户端联动升级的问题,本发明在系统升级时,无需升级老客户端的程序。因此,克服了系统组件的联动升级,使系统升级操作简单,方便维护,实现了轻量级的组件升级。
为方便理解,现举例说明分布式系统采用本发明实施例上述接口调用方法的具体应用,如图2所示,为本发明实施例图1方法的应用示意图。如果升级前客户端A和客户端B、以及服务器端C都使用Fun(a,b)的方法调用接口,例如图2(a)所示,客户端A发送的请求中包括Fun(1,2),客户端B发送的请求中包括Fun(3,4)。服务器端C则根据客户端A的请求,使用参数值为1和2来调用该方法的接口,同时,根据客户端B的请求,使用参数值为3和4来调用该方法的接口。
当服务器端C升级,则在服务器端C上为该方法定义了默认参数c,以及设置该默认参数c的默认数值为10,即Fun(a,b,c=10)。如图2(b)所示,如果客户端A发送的请求中包括Fun(1,2),客户端B发送的请求中包括Fun(3,4),服务器端C在收到这些请求后,分别在这些请求中查询默认参数的数值,由于客户端A和客户端B的请求中都没有指定所述默认参数c的数值,那么说明这两个客户端都为没有升级的老客户端,此时服务器端C从自身保存的信息中检索所述默认参数c的默认值,当检索到(即默认值为10)后,则根据客户端A的请求,使用默认值10以及请求中的其他参数值1和2来调用该方法接口;同时,根据客户端B的请求,使用该默认值10以及请求中的其他参数值3和4来调用该方法接口。
如果客户端B也升级了,则客户端B在发送的请求中可以为默认参数c设置指定的数值,例如图2(c)中,客户端B发送的请求中的为默认参数c指定的数值为20,即Fun(3,4,20)。而客户端A由于没有升级,因此,在客户端A发送的请求中没有默认参数c的数值,即仍然为Fun(1,2)。服务器端C当收到这些请求后,分别在这些请求中查询默认参数c的数值,由于客户端A的请求中没有指定所述默认参数c的数值,此时服务器端C则从自身保存的信息中检索到所述默认参数c的默认值10,然后根据客户端A的请求,使用该默认值10以及请求中的其他参数值1和2来调用该方法的接口;同时,根据客户端B的请求,由于客户端B的请求中包含了为所述默认参数c指定的数值20,则所述服务器端C使用该指定数值20以及该请求中的其他参数值3和4来调用该方法的接口。
基于上述技术方案,本发明实施例还公开了一种用于分布式系统的接口调用的装置,该装置可以集成在服务器端,采用IDL语言定义接口,所述装置在升级后的接口定义IDL语言中增加对方法参数的默认值的识别,以便在收到客户端发送的接口调用请求消息时,能够根据接口调用请求消息中是否包含该默认参数的数值来判断客户端为升级后的新客户端,还是未升级的老客户。
如图3所示,为本发明实施例一种用于分布式系统的接口调用装置结构示意框图。所述装置包括:接收单元301、默认值获取单元302、第一调用接口单元303,其中,
接收单元301,用于接收由客户端发送的接口调用请求消息;
默认值获取单元302,用于读取接收单元301中的接口调用请求消息中每个IDL语言的默认参数数值,当所述接口调用请求消息中不包含IDL默认参数的数值时,从预先存储的信息中获取所述IDL默认参数的默认值;其中,所述述IDL默认参数的默认值可预先存储在该装置所在服务器端的skeleton中。
第一调用接口单元303,用于使用所述默认值获取单元302获取的IDL默认参数的默认值调用所述客户端请求使用的接口,来通过该接口定义的功能实现相应的应用。
上述实施例中,由于在接口调用方法的IDL中设置了默认参数和该默认参数的默认值,这样,当客户端发送的接口调用请求消息中如果IDL默认参数没有指定的默认值,那么该客户端为未升级的老的客户端,此时,所述装置可使用自身预存的默认值来调用接口。可见,本发明实施例通过识别接口调用请求消息中IDL默认参数的数值来实现对新客户端和老客户端的区分操作,避免了现有技术中因服务器端系统升级而引起的客户端联动升级的问题。采用本发明实施例的接口调用方法可在系统升级时,无需升级老客户端的程序。因此,克服了系统组件的联动升级,使系统升级操作简单,方便维护,实现了轻量级的组件升级。
此外,在上述装置实施例的基础上,当接收单元301中的接口调用请求 消息中包含有客户端为所述IDL默认参数指定的数值时,所述装置则可直接使用所指定的数值调用接口。如图4所示,为本发明实施例另一种用于分布式系统的接口调用装置结构示意框图。所述装置在图3所示装置实施例的基础上,包括:接收单元301、默认值获取单元302、第一调用接口单元303、数值获取单元401、第二调用接口单元402,其中,
接收单元301,用于接收由客户端发送的接口调用请求消息;
默认值获取单元302,用于读取接收单元301中的接口调用请求消息中每个IDL语言的默认参数数值,当所述接口调用请求消息中不包含IDL默认参数的数值时,从预先存储的信息中获取所述IDL默认参数的默认值;其中,所述述IDL默认参数的默认值可预先存储在该装置所在服务器端的skeleton中。
第一调用接口单元303,用于使用默认值获取单元302获取的IDL默认参数的默认值调用所述客户端请求使用的接口,来通过该接口定义的功能实现相应的应用。
数值获取单元401,用于当接收单元301中的接口调用请求消息中包含IDL默认参数的数值时,从所述接口调用请求消息中获取该IDL默认参数的数值;
第二调用接口单元402,用于使用数值获取单元401获取的IDL默认参数的数值调用所述客户端请求的接口,来通过该接口定义的功能实现相应的应用。
此外,在上述图3所示的装置实施例的基础上,当预先存储的信息中没有找到所述IDL默认参数的默认值时,所述装置可停止接口的调用。如图5所示,为本发明实施例另一种用于分布式系统的接口调用装置结构示意框图。所述装置在图3所示装置实施例的基础上,包括:接收单元301、默认值获取单元302、第一调用接口单元303、默认值判断执行单元501,其中,
接收单元301,用于接收由客户端发送的接口调用请求消息。当接收单元301中的接口调用请求消息中不包含IDL默认参数的数值时,由默认值判断 执行单元501判断预先存储的信息中是否保存有所述IDL默认参数的默认值,如果有,则指令默认值获取单元302执行获取功能;否则,向客户端返回异常响应。
默认值获取单元302用于当所述接口调用请求消息中不包含IDL默认参数的数值时,从预先存储的信息中获取所述IDL默认参数的默认值。其中,所述述IDL默认参数的默认值可预先存储在该装置所在服务器端的skeleton中。
第一调用接口单元303,用于使用默认值获取单元302获取的IDL默认参数的默认值调用所述客户端请求使用的接口,来通过该接口定义的功能实现相应的应用。
此外,上述装置实施例中的默认值判断执行单元501除了应用在图3所示装置实施例中外,还可以应用在图4所示的装置实施例中,其功能与图5所示的相同,在此不再赘述。
此外,在上述装置实施例的基础上,本发明实施例还公开了一种分布式系统,该系统包括客户端和服务器,其中,所述服务器包括如上述图3或图4所示实施例的用于分布式系统的接口调用装置,该装置的结构及功能都与上述图3或图4所示装置实施例相同,在此不再赘述。
上述实施例中,由于在接口调用方法的IDL中设置了默认参数和该默认参数的默认值,这样,当客户端发送的接口调用请求消息中如果有默认参数指定的数值时,则该客户端为升级后的新客户端,此时,服务器端使用所述接口调用请求消息中指定的数值调用相应的接口实现后续的操作;若接口调用请求消息中默认参数没有指定的默认值,那么该客户端为未升级的老的客户端,如果该默认参数的默认值在服务器端有保存,服务器端则使用默认值来调用需要的接口。可见,本发明实施例通过识别接口调用请求消息中默认参数的数值来实现对新客户端和老客户端的区分操作,避免了现有技术中因服务器端系统升级而引起的客户端联动升级的问题,使系统升级操作简单,方便维护,实现了轻量级的组件升级。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明 的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的保护范围之内。