RPC和WebService等相关远程通信概念理解

借知乎上大神的回答,重新整理如下:

首先,RPC WebService SOAP RMI REST CORBA JMS等概念都是远程通信用的,只需要搞清楚:
传输层:如何传输,一般基于tcp或http;各种自定义协议;
协议层:(考虑传过来后如何读数据就可以)
            1)文本类:xml,json
            2)二进制:protobuf,thrift,mcpack等

RMI(remote method invocation,面向对象的远程方法调用)
RPC(remote procedure call,远程过程调用)
SOAP(simple object access protoal,简单对象访问协议)
REST(representational state transfer,表达性状态转移)


RPC是一个技术类别,和其他的几个术语不是同一类的。

RPC应该算是一个概念吧,RMI、REST、WEBSERVICE等也属于RPC,只是protocol不同。现在一谈到RPC更多的是想到dobbo、thrift、avro、hessian等框架。
个人理解是这样的,相对于淘宝、微信等的开发者API应用,一般所谓的RPC不仅仅得到的是一串JSON或XML铺在HTML上。RPC除了JSON和XML外更多的是可以传递二进制的数据,而且可以反序列化,就像是我们在我们自己的程序中从service接口拿一组List<User>一样使用。

RMI是Java自带的一些功能,也是EJB的通信基础,现在的Spring等框架上都有,如果你的项目只有Java,不会出现其他环境的系统(如.NET,Ruby,Python,PHP等),那用RMI应该是最有效,也是最简单的,用最纯粹的序列化就可以了;

RPC 和 REST 是两种不同的 API 接口风格。JMS 是另外一种不同风格的接口,但只是针对 Java 的,它所对应的更宽泛的接口风格是消息通讯。

RMI 和 CORBA 是两种较早期的 RPC 实现。RMI 仅仅可以用于 Java 之间的通讯,不能跨语言。CORBA 虽然是为跨语言而设计,但因为该协议过于复杂,早期实现了 CORBA 的语言之间在互通性上也存在诸多问题,而现今的新型语言绝大多数已经不再支持这个东西了。

WebService 有广义和狭义之分。广义的 WebService 包含了 RPC、REST、消息通讯等各种形式的远程通讯方式。而狭义的 WebService 特指以 SOAP 作为消息体的一种远程通讯方式,但即使是狭义的WebService,也不仅仅只有 RPC 一种风格的 API 接口,它也包括另一种消息通讯的方式的接口。但是狭义的 WebService 因为传输的数据臃肿,跨语言能力并没有它所标榜的那样好,因此现在大部分人都已经抛弃它而转向更轻量级的 RPC 通讯了。

比如现在比较流行的 RPC 有 gRPCHprose,  Apache ThriftJSON-RPC 等等。



附:

1、RPC:(Remote Procedure Call Protocol)

RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成

“classname.methodname”形式。

优点:跨语言跨平台,C端、S端有更大的独立性。

缺点:不支持对象,无法在编译器检查出错误,只能在运行期检查发现错误。


2、JMS:(Java Message Service)

JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS支持两种消息模型:Point-to-Point(P2P)

和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型。


3、Web Service:

web service提供的服务是基于web容器的,底层使用http协议,类似一个远程的服务提供者,例如天气预报服务,对各地的客户端提供天气预报,是一种请求应答机制,是跨系统跨平台的。就是一个servlet,提供服务出去。

首先,客户端从服务器得到WebService的WSDL,同时在客户端生成一个代理类,这个代理类负责与WebService服务器进行通信,当一个数据(XML格式的)被包装成SOAP(简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。)格式的数据发送到服务器端的时候,就会生成一个进程对象并且把接收到的这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个结果进行SOAP包装,然后把这个包作为一个

Response发送给客户端的代理类,然后这个代理类也对这个SOAP包进行解析出来,继而进行后续操作,这就是WebService的一个

运行过程。

Web Service的五大层次:

1、http传输协议(信道)

2、XML的数据格式

3、SOAP的封装格式(用来描述传递信息的格式)

4、WSDL(Web Service Description Language)的描述方式(用来描述如何访问具体的接口)

5、UDDI (Universal Description Discovery and Integration)是一种目录服务,可以用来管理(分发、注册、查询)WebService


4、RMI:(Remote Method Invocation)

RMI采用stubs 和 skeletons 来进行远程对象的通讯。stub充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的,通过该机制RMI就好比它是在本地工作,采用TCP/IP协议,客户端直接调用服务端上的一些方法。

优点:强类型,编译器即可检查错误,更快。

缺点:只能基于JAVA语言,客户端和服务器紧耦合,易用性没Web Service好。


总结:

Web Service 就是在http即应用层协议上传递xml数据格式的文本文件,与语言和平台无关。

RMI是在TCP/IP即传输层协议上传递可序列化的java对象(对象流化),只能在JVM上,绑定语言。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值