上图主要包括以下几个组成部分:
· Client 即客户程序,Client通过调用服务程序提供的接口实现特定功能。
· Object CORBA Object是一个语言无关的虚拟的实体,它可以由ORB定位,并可被客户程序请求调用,它最终由某种语言来具体实现,从而成为应用程序的一部分。
· Servant 即实例化的Object,Servant是组成服务程序,具体为Client提供服务的某个运行中(且被注册到OA)的C++/Java(或其他语言)对象。Object与Servant是一对多的关系,一个Object可以被实例化多次,注册到一个或多个OA中为一个或多个Client提供服务,各Servant对应不同的IOR(多个IOR具有相同的Type信息,但唯一标识不同),并且,每个Servant都可以由IOR唯一确定,对于持久Object,该IOR在两次启动同一系统时不会发生变化,除非服务程序所在主机IP或配置信息等发生改变,而对于非持久Object,该IOR在两次启动同一服务程序时,总是变化的(因为其中往往包含一个时间戳)。
· Stub 即桩,或称存根,Stub负责“假扮”Servant为Client提供一个本地化的接口,并负责与ORB进行交互,完成调用请求的列集(marshaling,即打包)与散集(unmarshaling,即解包)。列集的主要作用是按双方ORB可以识别的方式对需要传递的数据进行格式化,而散集则将收到的数据中还原成上层应用可以理解的内存数据形式,对于远端指针,散集时ORB还负责分配相应的内存空间,并将指针的内容复制到本地内存空间以为本地应用提供一个远端指针的镜像,从而保证本地应用对远端指针的“透明”访问。
· Skeleton 与Stub对应,负责调用参数在Server端的解包和调用返回的打包。
· ORB Core 屏蔽底层通信细节的中间件,所有远程访问请求在Client和Server端的ORB间被传递,使得上层应用无需关注平台、语言、网络结构等方面的差异。
文章来源于领测软件测试网 https://www.ltesting.net/