远程调用的几种方式

         在分布式服务框架中。最基础的问题就是远程服务是怎么通讯的。首先来看看计算机系统网络通信的基本原理。网络通信须要做的就是将流从一台计算机传输到另外一台计算 机,基于传输协议和网络IO来实现。当中传输协议有 tcpudp等等,tcpudp都是在基于Socket概念上为某类应用场景而扩展出的传输协议。网络IO。主要有bio nioaio三种方式,全部的分布式应用通讯都基于这个原理而实现,仅仅是为了应用的易用。各种语言通常都会提供一些更为贴近应用易用的应用层协议。在java领域中知名的有:RMIXML-RPCBinary-RPCSOAPCORBAJMS等。

Java领域中有非常多可实现远程通讯的技术。比如:RMIMINAESB BurlapHessianSOAPEJBJMS 等,这些技术都是在协议基础上实现的。那么我们主要讨论一下各个协议。


RMI

     RMI是个典型的为java定制的远程通信协议, 我们都知道,在single vm中,我们能够通过直接调用java object instance来实现通信,那么在远程通信时,假设也能依照这样的方式当然是最好了。这样的远程通信的机制成为RPCRemoteProcedure Call),RMI正是朝着这个目标而诞生的。

     传输的标准格式是Java Object Stream;基于Java串行化机制将请求的Java Object信息转化为流。传输协议是Socket

 

XML-RPC

      XML-RPC也是一种和RMI类似的远程调用的协议,它和RMI的不同之处在于它以标准的xml格式来定义请求的信息(请求的对象、方法、參数 ),这种优点是在跨语言通讯的时候也能够使用。所以RMIRPC的差别之中的一个是RPC是跨语言的

      传输的标准格式是XML。将XML转化为流。传输协议是HTTP

Binary-RPC

       Binary-RPCXML-RPC是差点儿相同,不同之处仅在于传输的标准格式由XML转为了二进制的格式。

       传输的标准格式是二进制文件。将二进制文件转化为传输的流。传输协议是HTTP

 

SOAP

        SOAPSimpleObject Access Protocol),是一个用于分布式环境的、轻量级的、基于XML进行信息交换的通信协议,能够觉得SOAPXML RPC的高级版。两者的原理全然同样。都是http+XML,不同的仅在于两者定义的XML规范不同。SOAP也是Webservice採用的服务调用协 议标准。

 

CORBA

      Common Object Request BrokerArchitecture(公用对象请求代理[调度]程序体系结构),是一组用来定义“分布式对象系统”的标准,由OMG(Object Menagement Group)作为发起和标准制定单位。CORBA的目的是定义一套协议,符合这个协议的对象能够互相交互,不论它们是用什么样的语言写的。不论它们执行于 什么样的机器和操作系统。CORBA是个类似于SOA的体系架构。涵盖可选的远程通信协议,但其本身不能列入通信协议。

 

JMS

      JMS。是实现java领域远程通信的一种手段和方法。基于JMS实现远程通信时和RPC是不同的。尽管能够做到RPC的效果,但由于不是从协议 级别定义的。因此我们不觉得JMS是个RPC协议,但它确实是个远程通信协议,在其它的语言体系中也存在着类似JMS的东西,能够统一的将这类机制称为消 息机制。而消息机制呢,一般是高并发、分布式领域推荐的一种通信机制,这里的主要一个问题是容错。JMS注重的是消息交换,RMI注重的是对象方法调用,所以目的不同。JMS大多时候是异步的松耦合,RMI大多时候是同步的紧耦合。

      JMS规定的传输格式是Message,将參数信息放入Message中,传输协议不限。基于JMS也是经常使用的实现远程异步调用的方法之中的一个。

原文地址:https://www.cnblogs.com/mengfanrong/p/5184382.html