不要纠结于分布式对象相关的通信协议。分布式对象的实质是单纯的。
程序包括很多对象,对象之间通过函数调用交互。比如cpu一个对象,console一个对象,ram一个对象,storage一个对象,user一个对象,security一个对象,那么通过为每个对象分配一个全局标识就能够实现分布式系统。有些对象不能分布,比如RPC对象,network对象。
cpu对象的函数包括:c库函数
ram对象的函数包括:c库函数
storage对象的函数包括:c库函数
user对象的函数包括:系统函数
security的函数包括:系统函数
阶段1:将远程函数的标识和网络协议作为参数调用构造一个network对象和一个RPC对象,本地调用将链接到该RPC对象,RPC对象将调用数据串行化打包给network对象,network对象通过http,tcp/ip,udp,ipsec。ssh,telnet等协议除外,因为这是类似打电话的应用协议,不适合传输RPC对象。
阶段2:因为存在多种语言,但是无法和RPC库的对象链接,因为接口不一致,所以定义IDL一种接口定义语言统一接口,就都能够链接到RPC库,进行分布式通信了。
阶段3:JAVA语言比较特殊,使用广泛,本身就是先编译为中间代码,因此不采用RPC库,而定义了java的远程分布式方法库,即JAVA RMI,因此java的分布式对象模型是RMI,一般属于虚拟机。
阶段4:corba依赖于tcp/ip协议是源于internet的,使用GIOP(通用)/IIOP(internet)协议来作为ORB底层的通信中间件,有如wcf。
阶段5:java要与corba互操作,主要是要兼容IIOP协议,因此诞生RMI-IIOP,是java的远程对象格式适配到IIOP协议,对于客户而言是RMI调用,对于corba而言,是IIOP(也叫ORB)调用(注意,不是RPC库)。
这就是目前常用的java中间件。