CORBA的大体实现方式:使用IDL实现与其它编程语言的映射;客户端服务端使用GIOP(主要是IIOP)协议进行通讯;客户端使用一种映射语言编写stub(桩)代码,使用对象引用服务端使用同种或异种映射语言编写skelecton(骨架)代码,真正实现服务;上述二者通过CORBA服务进行通讯。

 O、Corba概念(GIOP、IIOP、IOR、ORB、IDL

1. CORBA

  公用对象请求代理(调度)程序体系结构(Common Object Request Broker Architecture),缩写为 CORBA,是对象管理组织(Object Management Group)对应当今快速增长的软硬件的协同工作能力的要求而提出的方案。简而言之,CORBA 允许应用程序和其他的应用程序通讯,而不论他们在什么地方或者由谁来设计。  

  CORBA曾经是分布式计算的主流技术,在电信等领域使用广泛。开发和部署成本较高,目前属于已经基本被遗弃的技术,被轻量级的Web服务、RESTful服务等代替了。

2. IOR

  可互操作对象引用。

3. ORB(Object Request Broker)

  对象请求代理。ORB 是一个中间件,他在对象间建立客户-服务器的关系。通过 ORB,一个客户可以很简单地使用服务器对象的方法而不论服务器是在同一机器上还是通过一个网络访问。ORB 截获调用然后负责找到一个对象实现这个请求,传递参数和方法,最后返回结果。客户不用知道对象在哪里,是什么语言实现的,他的操作系统以及其他和对象接口无关的东西。

4. ORB 守护程序

  负责查找 IOR 指定的对象实现,以及建立客户机和服务器之间的连接。一旦建立了连接,GIOP 将定义一组由客户机用于请求或服务器用于响应的消息。

5. GIOP(General Inter-ORB Protocol)

  GIOP(通用对象请求代理间通信协议)元件提供了一个标准传输语法(低层数据表示方法)和ORB之间通信的信息格式集。GIOP只能用在ORB与ORB之间,而且,只能在符合理想条件的面向连接传输协议中使用。它不需要使用更高一层的RPC机制。这个协议是简单的(尽可能简单,但不是简单化),可升级的,使用方便。它被设计为可移动的、高效能的表现、较少依靠其它的低层传输协议。当然,由于不同传输使用不同版本的GIOP,它们可能不能直接协作工作,但它能很容易的连接网络域。

6. IIOP (Internet Inter-ORB Protocol)

  IIOP(Internet对象代理间通信协议) 元件指出如何通过TCP/IP连接交换GIOP信息。IIOP为Internet提供了一个标准的协作工作协议,它使兼容的ORB能基于现在流行的协议和产品进行“out of the box”方式的协作工作。它也能被用于两个半桥(half-bridges )之间的协议。该协议能用于任何ORB与IP(Internet Protocol)域之间的协作工作,除非ORB选择了特殊的协议。这时,它是TCP/IP环境下基本的inter-ORB 协议,最普遍的传输层。
  GIOP 不基于任何特别的网络协议,OMG 在最广泛使用的通信传输平台 — TCP/IP 上标准化 GIOP,GIOP 加 TCP/IP 等于 IIOP

7. IDL 

  IDL全称接口定义语言,是用来描述软件组件接口的一种规范语言。用户可以定义模块、接口、属性、方法、输入输出参数,甚至异常等等。IDL在不同的语言下都有相应的实现,可以把IDL描述的接口编译为目标语言,包括客户端代理和服务器端框架,以及相应的帮助类等等。比如Java中提供过了idlj命令用来编译。

8. CORBA与ORB的关系

  CORBA的分布式对象调用能力依赖于ORB,而ORB之间进行通信是通过GIOP协议完成的。GIOP定义了ORB之间互操作的传输语法和标准消息格式,比如请求头、请求体所包含的字段和长度。 

9. IIOP与GIOP的关系

  IIOP与GIOP的关系就象特特殊语言与OMG IDL之间的关系;GIOP能被映射到不同层,它能指定协议。就象IDL不能见招完整的程序一样,GIOP 本身也不能提供完整的协作工作。IIOP和不同传输层上的其它相似映射,实现抽象的GIOP定义。
GIOP是一个抽象的协议,而IIOP是其一个具体的实现,定义了,如何通过TCP/IP协议交换GIOP消息。 所以通常我们说CORBA是基于IIOP协议的。以上文章转至http://www.cnblogs.com/nliao/p/3308669.html

  其中在linux中的集中CORBA中间件及获取方式在该网址已做了信息介绍:http://www.yolinux.com/TUTORIALS/CORBA.html

  OMG已认可并在官网挂载的CORBA组件列表请查看https://www.corba.org/corbadownloads.htm

一、Omni-ORB开源中间件

  下载链接http://omniorb.sourceforge.net/,遵守GNU,免费开源的一款中间件。

  omniORB是CORBA(公用对象代理体系架构)的一种开发库,主要适用C++和Python。CORBA
实现了异构系统的异种语言软体合并、协作。
  OmniORB 的简单使用例子https://blog.csdn.net/suwei19870312/article/details/7870268,该例子是结合vs2005来讲解的,可能出现的问题可参考https://blog.csdn.net/u010171985/article/details/51234847。也可以在linux中应用。
  亲身体验CORBA: 使用java和C++混合编程:本文作者通过一次使用SUN的 tnameserv命名服务程序,服务器用JAVA编写,客户机分别用JAVA和C++(VC6+omniORB)编写的试验,希望通过一次编程的具体操作实例来体验或明了CORBA思想。详细内容可参考https://www.cnblogs.com/adylee/archive/2008/11/21/1338629.html
 
二、TAO-ORB开源中间件
  TAO(The ACE ORB)是美国华盛顿大学的Douglas C. Schmidt教授领导开发的一个实时CORBA平台,它是一个免费的开放源码项目,用C++语言开发,符合CORBA2.6规范。
 

外文名TAO==
全    称The ACE ORB==
定    义一个免费的开放源码项目
支持语言C++
  支持语言: C++
  支持平台: Win32,常见的各种Unix/Linux,实时操作系统如VxWorks等等。在所有的CORBA实现中,TAO支持的平台是最多的。
  支持的服务: Naming、Event、Notification、Security、Time、Scheduling、Logging、Lifecycle、Trading、Concurrency、Lifecycle、A/V Streaming、Load balancing等。
  在windows上的应用可以参考:TAO使用指南 — 编译ACE和TAO,Win32+VC6.0下编译和安装ACE和TAO https://www.xuebuyuan.com/627942.html
 注意ACE本来是通讯库。
 
 三、ActiveMQ/ Active Message Queue中间件
  Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。 

  ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。ActiveMQ使用Apache提供的授权,任何人都可以对其实现代码进行修改。

  ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。ActiveMQ实现了JMS标准并提供了很多附加的特性。这些附加的特性包括,JMX管理(java Management Extensions,即java管理扩展),主从管理(master/salve,这是集群模式的一种,主要体现在可靠性方面,当主中介(代理)出现故障,那么从代理会替代主代理的位置,不至于使消息系统瘫痪)、消息组通信(同一组的消息,仅会提交给一个客户进行处理)、有序消息管理(确保消息能够按照发送的次序被接受者接收)。消息优先级(优先级高的消息先被投递和处理)、订阅消息的延迟接收(订阅消息在发布时,如果订阅者没有开启连接,那么当订阅者开启连接时,消息中介将会向其提交之前的,其未处理的消息)、接收者处理过慢(可以使用动态负载平衡,将多数消息提交到处理快的接收者,这主要是对PTP消息所说)、虚拟接收者(降低与中介的连接数目)、成熟的消息持久化技术(部分消息需要持久化到数据库或文件系统中,当中介崩溃时,信息不会丢失)、支持游标操作(可以处理大消息)、支持消息的转换、通过使用Apache的Camel可以支持EIP、使用镜像队列的形式轻松的对消息队列进行监控等。

  消息中间件及MQ的详细介绍请查看链接:https://segmentfault.com/a/1190000014958916
 
四、IBM 中间件

    (1)CORBA C++ Emitter

     这个是IBM自己做的一个CORBA中间件,目前在外网无法查找和下载,也没有相关的资料,大部分都是内部使用。

  (2)MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)     

     是一种基于发布/订阅(publish/subscribe)模式的”轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

     MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

  后续有发现其它更多被认可且广泛使用的中间件会在此继续更新。

版权声明:本文为depend-wind原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/depend-wind/articles/11089497.html