Idl调用装置及调用方法

文档序号:6573307阅读:506来源:国知局
专利名称:Idl调用装置及调用方法
技术领域
本发明涉及IDL调用技术,尤其是一种IDL调用装置及调用方法。
背景技术
目前,国际上较具影响力的分布式组件对象标准有以下三种微软公司的分布式组件对象模型(Distributed Component Object Model,以下简称DCOM)、OMG组织的通用对象请求代理架构(Common Object Request BrokerArchitecture,以下简称CORBA)与SUN公司的Java2平台企业版(Java2Platform,Enterprise Edition,以下简称J2EE)。其中,DCOM作为微软公司提出的分布式组件对象模型标准,支持在局域网、广域网甚至Internet上不同计算机的对象之间的通讯,但其仅适用于Windows环境;J2EE作为SUN公司提出的分布式对象总线标准,只能用JAVA实现,无法做到组件调用透明化;而CORBA是由OMG组织制订的一种标准的面向对象应用程序体系规范,由对象请求代理(以下简称ORB)、对象服务、公共设施、域接口与应用接口等几个部分组成,其跨平台性优于其它的中间件,可以在各种语言环境下进行分布式系统网络互操作,能在多层分布式系统中应用得更广泛、更灵活,使网络互操作更容易。
如图1所示,为现有技术CORBA的结构示意图,其由动态调用接口(以下简称DII)、接口定义语言(以下简称IDL)、对象请求代理(以下简称ORB)核心、接口库(以下简称IR)、动态框架接口(以下简称DSI)与对象适配器(以下简称OA)构成。
其中,ORB核心是使得客户应用程序能调用远端对象方法的机制,是CORBA的核心组件,其提供了识别和定位对象、处理连接管理、传送数据和请求通信所需的框架结构。具体地,当客户应用程序要调用远程对象上的方法时,首先要得到这个远程对象引用,然后就可以像调用本地对象一样调用远程对象。当客户应用程序发出一个调用时,ORB核心会将调用的名字、参数等信息编码成标准格式,通过网络传输到服务器上(同一台机器上也如此);服务器将参数解码后传到正确的对象上,该过程即为重定向;对象处理完成后,ORB通过同样的编码/解码方式将调用结果返回给客户应用程序。
IDL定义了CORBA对象之间的接口,用IDL描述的接口可以映射到任何编程语言,在确保CORBA的语言无关性方面起着重要的作用。一个IDL文件经IDL编译器编译后自动生成IDL存根(Stub)与IDL框架(Skeleton),“Stub”放置在客户端,“Skeleton”放在服务器端。“Stub”在客户激活调用时,同Client及ORB联系,将IDL定义的对象类型的OMG IDL操作定义映射到客户应用程序激活调用时要调用的一套与编程语言有关的例程。它只实现本地代理并不负责对象的实现,对象引用到ORB的传递由存根实现。“Skeleton”的功能在于接受由“Stub”对“Invoke”的调用而传来的消息,当它收到消息后,就调用真正的GetName方法,然后将结果包装起来迅速传给客户应用程序。通常包含将一个对象上的操作映射到合适的实现与方法上的必要信息,并且提供调度请求到适当方法的必要代码。
DII同客户端(Client)、ORB核心、IR连接,客户应用程序使用这些标准的应用程序接口(以下简称API)动态地发起一个CORBA调用,不需“Stub”起作用。
DSI是一组标准的API,服务器可以通过它决定一些问题,如调用哪个对象、调用对象的哪个操作、操作的参数是什么等。
IR包含有API与网络上存在的数据对象的描述,其作用是为动态激发请求提供信息,即能够在程序运行时刻提供被调用对象的一些信息如对象有哪些操作,每个对象的参数有哪些,参数的数据类型是哪些等。
OA提供了服务器端对象与ORB核心之间的适配层,实现请求到服务的调度,一个OA就是一个对象。具有以下功能创建对象引用;确保每个目标对象由一个伺服程序来具体化;获取由一个服务器端ORB调度的请求,并进一步将该请求直接传送给已具体化为目标对象的伺服程序。
在CORBA中,分布式调用有“oneway”与“twoway”两种模式。其中,“oneway”是无应答调用,在IDL声明中表现为“oneway”前缀以及函数返回值必须是“void”,系统不保证调用请求的送达;“twoway”是有应答调用,在IDL声明中不带前缀默认为“twoway”,系统保证回送应答。
若要实现方法调用与异步消息之间的映射,“Stub”与“Skeleton”需要完成的关键的工作包括分别通过“Marshal”与“Unmarshal”将方法调用编码为请求消息,以及将应答消息解码为返回值与输出参数;支持同步调用,同步调用会阻塞调用者线程,直到调用完成或超时才能处理后续的逻辑。
图2所示为现有技术CORBA实现对象引用的原理图,其具体操作如下客户应用程序通过注册的服务名或分布式对象引用获取被调用对象的对象引用;若该对象实现存在相应的“Stub”,则进行后续调用,客户应用程序通过该“Stub”向ORB核心发送对象调用请求;ORB核心将该对象调用请求发送给相应的OA;OA判断该对象调用请求所请求的对象实现是否存在“Skeleton”,若存在,则OA通过该“Skeleton”调用对象中的操作;若不存在,则OA通过ORB向客户应用程序返回系统异常的通知消息,本次调用失败。
对象实现的特定操作执行完成后,对象执行操作产生的结果,包括输出参数、输入输出参数、返回值、异常信息等,由服务器端应用程序按照对象调用请求传递与执行路径,将对象执行操作产生的结果逆向返回给客户应用程序。
在CORBA平台中,所有服务(Service)都是一个个相互独立的进程,服务之间没有关联,不易于管理;另外,这些服务之间进行IDL调用时,不管调用双方是否在同一台机器上,都必须进行IDL远程调用,即必须将调用转换为消息进行编/解码与调度。当调用服务双方运行在同一台机器上时,一方服务仍然需要对另一方服务进行IDL远程调用,而通过将调用转换为消息进行编/解码与调度的过程占用了有限的CORBA平台系统的资源,随着网络系统的日益庞大与复杂,对CORBA平台系统的资源需求也日益提高,而不必要的资源占用可能会导致CORBA平台系统的资源紧缺,从而无法处理运行在不同机器上的服务双方调用的正常调用请求;并且,将调用转换为消息进行编/解码与调度的过程还需要一定的时间实现,这就影响了IDL调用速度,进一步影响了CORBA平台系统的调用性能,本发明人通过研究发现,采用现有技术的该调用方法,调用服务双方运行在同一台机器上时的调用性能并不高于调用双方运行在两台机器上的调用性能,这也进一步限制了CORBA平台系统的工作效率。

发明内容
本发明实施例所要解决的技术问题是当调用服务对象双方运行在同一台机器上时,仍然需要进行IDL远程调用,占用了不必要的系统资源,且影响了IDL调用速度与调用性能,限制了CORBA平台系统的工作效率。
根据本发明的一个方面,提供一种IDL调用方法,其包括以下步骤接收服务对象调用请求,该服务对象调用请求中包含标识请求调用的服务对象的服务对象标识与标识客户应用程序的客户应用程序标识;根据所述服务对象标识与所述客户应用程序标识,判断所述客户应用程序与所述服务对象是否存在于同一个用于加载服务对象的容器进程中;所述客户应用程序与所述服务对象存在于同一个容器进程中时,所述客户应用程序对所述服务对象进行本地调用。
根据本发明的另一个方面,提供一种IDL调用装置,包括服务对象的框架,还包括客户应用程序的存根,用于生成并发送服务对象调用请求,以及利用接收到的服务对象指针对所述服务对象进行本地调用,在接收到无法对所述服务对象进行本地调用的通知信息后,对所述服务对象标识与调用参数进行编码并发送调用请求消息,接收到应答消息后,对所述应答消息中编码的运行结果进行解码,并将解码得到的运行结果返回所述客户应用程序;容器进程,分别与所述存根及所述框架连接,用于加载服务对象,向加载的服务对象分配服务对象标识,并存储服务对象名称与该服务对象标识之间的对应关系信息;接收并转发服务对象调用请求消息与应答消息,以及判断所述客户应用程序与所述服务对象是否存在于同一个容器进程中,如是,则向所述存根发送服务对象指针,如否,则向所述存根发送无法对所述服务对象进行本地调用的通知信息。
本发明实施例IDL调用装置中设置了用于加载服务对象的容器进程,每个容器进程可以加载一个或多个服务对象,并在加载服务对象时向其分配服务对象标识,当客户应用程序发送服务对象调用请求时,根据服务对象标识与客户应用程序标识,判断客户应用程序与服务对象是否存在于同一个容器进程中,当二者在同一个容器进程中时,客户应用程序存根可以对服务对象直接进行本地调用,这就节省了因不必要的IDL远程调用所占用的系统资源,实现了对系统资源的有效利用;并且,与IDL远程调用相比,节省了将调用转换为消息进行编/解码与调度的过程所需的时间,提高了IDL调用速度与调用性能,提高了IDL调用装置的工作效率;另外,将服务对象加载在容器进程中运行,便于通过容器进程对服务对象进行统一设置与管理。
下面通过附图和实施例,对本发明实施例的技术方案做进一步的详细描述。


图1为现有技术CORBA的结构示意图。
图2为现有技术CORBA实现对象引用的原理图。
图3为本发明IDL调用装置实施例的结构示意图。
图4为本发明IDL调用方法实施例的流程图。
图5为本发明实施例容器进程的分布原理图。
图6为本发明IDL调用方法另一实施例的流程图。
具体实施例方式
本发明实施例预先设置可以加载一个或多个服务对象的容器进程,当发起服务对象调用请求的客户应用程序与请求调用的服务对象存在于同一个容器进程中时,客户应用程序对服务对象进行直接调用,否则,对服务对象进行IDL远程调用。
如图3所示,为本发明IDL调用装置实施例的结构示意图,其包括依次连接的客户应用程序的存根1、容器进程2与服务对象的框架3。
其中,存根1用于根据客户应用程序输入的服务对象标识与客户应用程序标识生成服务对象调用请求,并将该服务对象调用请求转发给容器进程2,以及在接收容器进程2返回的服务对象指针时,利用该服务对象指针对服务对象进行本地调用;在接收到容器进程2返回的无法对服务对象进行本地调用的通知信息后,对服务对象标识与调用参数进行编码并发送调用请求消息,在接收到容器进程2返回的应答消息后,对应答消息中编码的运行结果进行解码,并将解码得到的运行结果返回客户应用程序。如下所示为存根1的一个IDL接口实例,该接口通过“interface”关键字定义,接口名为“Calculator”{long add(in long x,in long y);//接口中定义的twoway方法}通过该定义,当服务端的一个服务对象实现了上述“Calculator”接口后,就可以发布该IDL接口文件,具体地,可以将该IDL接口文件存储在磁盘主机磁盘上,通过介质磁盘或网络方式发布该IDL接口文件,通过该IDL接口文件,客户端的客户应用程序便可以对该服务对象进行本地调用或者IDL远程调用。
存根可以根据容器进程2返回的服务对象指针对服务对象进行本地调用,从而可以达到节省调用资源与提高调用速度及调用性能的效果。
容器进程2用于加载服务对象,向加载的服务分配并服务对象标识,并存储服务对象名称与该服务对象标识之间的对应关系信息;接收到存根1发送的服务对象调用请求后,判断客户应用程序与服务对象是否存在于同一个容器进程中,如是,则向存根1发送服务对象指针,如否,则向存根1发送无法对服务对象进行本地调用的通知信息;另外,还接收存根1发送的调用请求消息并将该服务对象调用请求消息转发给框架3,以及接收框架3返回的应答消息,并将该应答消息转发给存根1。
容器进程可以加载一个或多个服务对象,这样,便可以对其中加载的服务对象进行统一设置与管理,非常方便;并且,在加载服务对象时向其分配服务对象标识,当接收到服务对象调用请求时,可以根据服务对象标识与客户应用程序标识,判断客户应用程序与服务对象是否存在于同一个容器进程中,当二者在同一个容器进程中时,客户应用程序存根对服务对象直接进行本地调用,这就节省了因不必要的IDL远程调用所占用的系统资源,实现了对系统资源的有效利用;并且,与IDL远程调用相比,省了将调用转换为消息进行编/解码与调度的过程所需的时间,提高了IDL调用速度与调用性能,提高了IDL调用装置的工作效率;另外,将服务对象加载在容器进程中运行,便于通过容器进程对服务对象进行统一设置与管理。
框架3的功能与CORBA中的相同,用于在接收到容器进程2转发的调用请求消息后,对该调用请求消息进行解码,得到服务对象标识与调用参数,根据该服务对象标识中的服务标识与调用参数调用服务对象并运行,并对运行结果进行编码,然后向容器进程2返回应答消息,该应答消息中携带有编码的运行结果。
在上述IDL调用装置的实施例中,容器进程2包括依次连接的缓存模块21、加载模块22、存储模块23、判断模块24与转发模块25,转发模块25还分别与存根1及框架3连接。其中,加载模块22用于加载服务对象并向服务对象分配服务对象标识;缓存模块21用于缓存加载的服务对象;存储模块23用于存储服务对象的名称与服务对象标识之间的对应关系信息;判断模块24用于接收转发模块25转发的服务对象调用请求,判断客户应用程序标识与服务对象标识是否存在于同一个存储模块中;转发模块25用于接收存根1发送的服务对象调用请求,并转发给判断模块24,在客户应用程序与服务对象存在于同一个容器进程中时,向存根1发送服务对象指针,否则,向存根1发送无法对所述服务对象进行本地调用的通知信息,接收存根1发送的调用请求消息并转发给框架3,接收框架3发送的应答消息并转发给存根1。
另外,容器进程2还可以包括卸载模块26,分别与缓存模块21及存储模块23连接,用于卸载服务对象,并从存储模块23中删除卸载的服务对象的对应关系信息。
本发明实施例提供的上述IDL调用装置可以存储在一个计算机可读取存储介质中。
图4所示为本发明IDL调用方法实施例的流程图,其包括以下步骤接收服务对象调用请求,该服务对象调用请求中包含标识请求调用的服务对象的服务对象标识与标识客户应用程序的客户应用程序标识(步骤1);根据服务对象标识与客户应用程序标识,判断客户应用程序与服务对象是否存在于同一个容器进程中,该容器进程用于加载一个或多个服务对象(步骤2);如客户应用程序与服务对象存在于同一个容器进程中,则客户应用程序对服务对象直接进行本地调用(步骤3)。
当客户应用程序与服务对象在同一个容器进程中时,客户应用程序存根可以对服务对象直接进行本地调用,避免了由于不必要的IDL远程调用所导致的资源浪费,实现了对系统资源的有效利用;与IDL远程调用相比,提高了IDL调用速度与调用性能。
再参见图4,当客户应用程序与服务对象不存在于同一个容器进程中时,客户应用程序对服务对象进行IDL远程调用(步骤4)。
预先在主机上设置容器进程,该容器进程提供ORB能力,支持服务对象的定位与访问,服务对象都是以动态库的形式提供,被容器进程加载运行。不同的服务对象可能部署在同一个容器进程中,也可能分布在不同主机的容器进程中。如图5所示,为本发明实施例容器进程的分布原理图。若两个服务对象部署在不同主机的容器进程中,或者部署在同一主机的不同容器进程中,则两个服务对象之间只能进行IDL远程调用,若两个服务对象在同一容器进程中时,则通过获取被调用服务对象的地址直接调用该被调用服务对象。
为了区分不同的容器进程,设置容器进程时向其分配一个唯一标识每一个容器进程的容器进程标识(以下简称ID),可以称为Container ID。一种分配Container ID的可行方案是以主机的IP地址作为Container ID的一部分,另外再辅以0~N的序号区分同一主机上的不同容器进程,以保证唯一性。
容器进程中的加载模块22加载服务对象时,向其分配在该容器进程中标识该服务对象的服务标识,可以称为Service ID,并存储该服务对象名称与其Service ID之间的对应关系信息,服务对象标识(以下简称IOR)可以由Container ID与Service ID两部分构成,即Container ID+Service ID,客户应用程序可以根据服务对象标识访问服务对象,当进程容器卸载服务对象时,删除该服务对象的服务标识。如下所示为一服务对象标识的具体实例{Container ID;Service ID;}由服务对象标识的构成可知,若两个服务对象标识中的Container ID相同,则表示这两个服务对象处于同一个容器进程中,二者之间可以进行本地调用;若两个服务对象标识中的Container ID不同,则表示这两个服务对象处于不同的容器进程中,二者之间需要进行IDL远程调用。图4所示的步骤2中,可以通过判断客户应用程序的容器进程中是否存在被调用的服务对象的服务对象标识来判断客户应用程序与被调用的服务对象是否存在于同一个容器进程中。
图6所示,为本发明IDL调用方法另一实施例的流程图,该实施例利用图3所示的IDL调用装置对服务对象add进行调用,其具体包括客户应用程序传入自己的标识,例如10.11.123.1+2+12,与请求调用的服务对象add的服务对象标识,例如122.111.12.123+0+1,并通过服务对象名称或服务对象标识创建存根1(步骤101);存根1根据客户应用程序输入的服务对象标识与客户应用程序标识生成服务对象调用请求并发送给客户端的容器进程2中的转发模块25,该服务对象调用请求中包含服务对象标识与客户应用程序标识(步骤102);容器进程2中的判断模块24判断服务对象标识与客户应用程序标识中的Container ID是否相同,或者查询存储模块23中是否存储有服务对象的服务对象标识,来判断服务对象与客户应用程序是否存在于同一个容器进程中(步骤103),如下所示为判断模块24判断服务对象标识与客户应用程序标识中的Container ID是否相同的一实例{If(client IOR.Container ID==server IOR.Container ID){//容器进程中所有服务对象都存放在缓存模块21中,以IOR作为键值return(Service*)Service Map[server IOR];}//otherwise,not in same Containerreturn NULL;
}如果服务对象与客户应用程序存在于同一个容器进程中,则判断模块24根据存储模块23中存储的服务对象标识创建该服务对象的服务指针并返回存根1(步骤104);存根1利用服务指针对服务对象进行本地调用并运行,然后向客户应用程序返回运行结果(步骤105);对于运行在一个容器进程中的服务对象,在相同条件下,对其进行本地调用与通过IDL接口进行远程调用相比,其调用速度大大提高,调用性能提高了100倍左右,并且减少了所需占用的资源。
如果服务对象与客户应用程序不存在于同一个容器进程中,则转发模块25向存根1发送无法对服务对象进行本地调用的通知信息(步骤106);存根1对服务对象标识与调用参数(例如1与2)进行编码,并向容器进程2发送调用请求消息“Request Message”,该调用请求消息“RequestMessage”中携带有编码的服务对象标识与调用参数,接着设置“WAIT_REPLY”状态,并挂起线程等待应答消息(步骤107);容器进程2根据服务对象标识中的Container ID获知服务对象的容器进程的位置,并将调用请求消息“Request Message”转发给服务对象的容器进程,由该服务对象的容器进程根据服务对象标识中的Service ID,将调用请求消息“Request Message”转发给服务对象的框架3(步骤108);框架3对调用请求消息中编码的服务对象标识与调用参数进行解码,得到服务对象标识与调用参数(步骤109);框架3根据所在的容器进程中的存储模块中存储的服务对象的名称与服务对象标识之间的对应关系信息,由服务对象标识中的Service ID获知服务对象的名称,然后根据该服务对象的名称与调用参数调用服务对象并运行,然后对运行结果进行编码,并通过容器进程2向存根1返回应答消息“ReplyMessage”,该应答消息“Reply Message”中携带有编码的运行结果(步骤110);
存根1对应答消息“Reply Message”中编码的运行结果进行解码,并将解码得到的运行结果返回客户应用程序(步骤111)。
本发明实施例的IDL调用装置与调用方法具有以下有益技术效果当客户应用程序与请求调用的服务对象存在于同一个容器进程中时,客户应用程序存根可以直接对服务对象直接进行本地调用,节省了系统资源,实现了对系统资源的有效利用;与IDL远程调用相比,提高了IDL调用速度与调用性能,提高了IDL调用装置的工作效率;通过容器进程便于对服务对象进行统一设置与管理。
最后所应说明的是以上实施例仅用以说明本发明的技术方案,而非对本发明作限制性理解。尽管参照上述较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解其依然可以对本发明的技术方案进行修改或者等同替换,而这种修改或者等同替换并不脱离本发明技术方案的精神和范围。
权利要求
1.一种IDL调用方法,其特征在于,包括以下步骤接收服务对象调用请求,该服务对象调用请求中包含标识请求调用的服务对象的服务对象标识与标识客户应用程序的客户应用程序标识;根据所述服务对象标识与所述客户应用程序标识,判断所述客户应用程序与所述服务对象是否存在于同一个用于加载服务对象的容器进程中;所述客户应用程序与所述服务对象存在于同一个容器进程中时,所述客户应用程序对所述服务对象进行本地调用。
2.根据权利要求1所述的方法,其特征在于,还包括容器进程加载服务对象时,向所述服务对象分配在所述容器进程中标识所述服务对象的服务标识,并存储所述服务对象名称与所述服务对象标识之间的对应关系信息,所述服务对象标识包括标识所述容器进程的容器进程标识与所述服务标识。
3.根据权利要求2所述的方法,其特征在于,还包括设置容器进程并向该容器进程分配所述容器进程标识的操作。
4.根据权利要求1、2或3所述的方法,其特征在于,判断所述客户应用程序与所述服务对象是否存在于同一个容器进程中具体为所述客户应用程序的容器进程判断是否存在所述服务对象标识。
5.根据权利要求1、2或3所述的方法,其特征在于,所述客户应用程序对所述服务对象进行本地调用包括所述容器进程向所述客户应用程序创建的存根返回所述服务对象的服务指针;所述存根利用所述服务指针对所述服务对象进行本地调用并运行,然后向所述客户应用程序返回运行结果。
6.根据权利要求1、2或3所述的方法,其特征在于,所述客户应用程序与所述服务对象不存在于同一个容器进程中时,所述客户应用程序对所述服务对象进行IDL远程调用。
7.根据权利要求1所述的方法,其特征在于,还包括进程容器卸载服务对象时,还删除该服务对象的服务标识。
8.一种IDL调用装置,包括服务对象的框架,其特征在于,还包括客户应用程序的存根,用于生成并发送服务对象调用请求,以及利用接收到的服务对象指针对所述服务对象进行本地调用,在接收到无法对所述服务对象进行本地调用的通知信息后,对所述服务对象标识与调用参数进行编码并发送调用请求消息,接收到应答消息后,对所述应答消息中编码的运行结果进行解码,并将解码得到的运行结果返回所述客户应用程序;容器进程,分别与所述存根及所述框架连接,用于加载服务对象,向加载的服务对象分配服务对象标识,并存储服务对象名称与该服务对象标识之间的对应关系信息;接收并转发服务对象调用请求消息与应答消息,以及判断所述客户应用程序与所述服务对象是否存在于同一个容器进程中,如是,则向所述存根发送服务对象指针,如否,则向所述存根发送无法对所述服务对象进行本地调用的通知信息。
9.根据权利要求8所述的装置,其特征在于,所述容器进程包括加载模块,用于加载服务对象并向所述服务对象分配服务对象标识;缓存模块,与所述加载模块连接,用于缓存加载的服务对象;存储模块,与所述加载模块连接,用于存储服务对象名称与服务对象标识之间的对应关系信息;判断模块,与所述存储模块连接,用于判断客户应用程序标识与服务对象标识是否存在于同一个存储模块中;转发模块,分别与所述判断模块、所述存根及所述框架连接,用于在存根与所述框架之间转发服务对象调用请求消息与应答消息,以及在所述客户应用程序与所述服务对象存在于同一个容器进程中时,向所述存根发送服务对象指针,否则,向所述存根发送无法对所述服务对象进行本地调用的通知信息。
10.根据权利要求8或9所述的装置,其特征在于,所述容器进程包括卸载模块,分别与所述缓存模块及所述存储模块连接,用于卸载服务对象,并从所述存储模块中删除卸载的服务对象的对应关系信息。
全文摘要
本发明公开了一种IDL调用装置及调用方法,其中,调用方法包括接收服务对象调用请求,该服务对象调用请求中包含标识请求调用的服务对象的服务对象标识与标识客户应用程序的客户应用程序标识;根据服务对象标识与客户应用程序标识,判断客户应用程序与服务对象是否存在于同一个用于加载服务对象的容器进程中;所述客户应用程序与所述服务对象存在于同一个容器进程中时,客户应用程序对服务对象进行本地调用。当客户应用程序与服务对象存在于同一个容器进程中时,采用本发明,客户应用程序存根可以对服务对象直接进行本地调用,避免了不必要的IDL远程调用所占用的系统资源,提高了IDL调用速度与调用性能。
文档编号G06F9/46GK101017447SQ20071006385
公开日2007年8月15日 申请日期2007年2月13日 优先权日2007年2月13日
发明者李战杰, 丁凯, 申海 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1