爱上极客's Archivers

From yan on 2016-04-11 15:33:22

远程通信的方式及选择(三)——RPC WebServer HttpRequest RMI JMS

PRC通信(Remote Procedure Call Protocol)


RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.methodname”形式。优点是跨语言跨平台,C端、S端有更大的独立性,缺点是不支持对象,无法在编译器检查错误,只能在运行期检查。

Web Service


WebService是一种跨编程语言和跨操作系统平台的远程调用技术。Web Service提供的服务是基于web容器的,底层使用http协议,类似一个远程的服务提供者,比如天气预报服务,对各地客户端提供天气预报,是一种请求应答的机制,是跨系统跨平台的。就是通过一个servlet,提供服务出去。

原理:

  1. 1. 采用HTTP协议传输数据

  2. 2. 采用XML格式封装数据

  3. 3. 利用SOAP协议封装, SOAP协议 = HTTP协议 + XML数据格式。SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。

  4. 4. WSDL描述文件(存储在中心服务器)。基于XML的语言,用于描述Web Service可以调用的服务及其函数、参数和返回值。

  5. 5. (可选)UDDI目录服务,企业可以使用它对Webservices进行注册和搜索,如查找WSDL文件


运行流程:

提供者:

设计服务,并将服务的描述文件WSDL在UDDI服务中心注册(发布服务)

消费者:

1. 通过UDDI查找或手动设定WSDL地址,找到服务(发现服务)

2. 解析WSDL描述文件,并连接服务提供者(绑定服务)

3. 发送SOAP消息,并得到提供者处理后的返回(消费服务)

HttpRequest


通常的HttpRequest是指利用HTTP的GET或POST方法发送JSON/XML数据,进行数据的传输。

具体参考HTTP传输协议

RMI (Remote Method Invocation)


RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的,通过该机制RMI就好比它是本地工作,采用tcp/ip协议,客户端直接调用服务端上的一些方法。优点是强类型,编译期可检查错误,缺点是只能基于JAVA语言,客户机与服务器紧耦合。

JMS(Java Messaging Service)


JMS是Java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS支持两种消息模型:Point-to-Point(P2P)和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型。

RPC、RMI与WebServer


RPC


跨语言,不支持对象的概念。当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为 “classname”的类中,名叫“methodname”。

RMI


只支持java,允许方法返回 Java 对象以及基本数据类型(序列化),每个远程方法都具有方法签名。

WebServer


webservice是在http协议上传递xml文本文件,与语言和平台无关,并且通过描述文件WSDL进行方法的选择。

JMS、RMI与WebServer


JMS


JMS是异步的,松耦合的,消息通知机制(对象是在物理上被异步从网络的某个JVM 上直接移动到另一个JVM 上)

RMI


RMI一般都是同步的,紧耦合的,请求应答机制(对象是绑定在本地JVM 中,只有函数参数和返回值是通过网络传送的)

WebServer


Webservice专注于远程服务调用,和RMI类似,是同步的,紧耦合的,请求应答机制的。同时需要有复杂的转换

WebServer与HttpRequest


WebServer是基于HTTP实现的,效率上肯定是要低于HttpRequest。但是在复杂的应用中,例如对Soap协议的使用就是需要WebServer来完成。

HttpRequest对于单纯的取数据是可以的。用 XML 或者 JSON 单向从服务器取数据。而用WebServer的Soap协议是指,客户端调用服务器端上定义的方法(类似RPC)

小结


RPC 跨语言 跨平台

RMI 只支持java

JMS 只支持java

WebServer 跨语言 跨平台

Socket 跨语言 跨平台

HTTP 跨语言 跨平台

应用层:HTTP -> HTTP RPC WebServer

传输层:TCP/IP -> RMI SOCKET JMS

查看完整版本: 远程通信的方式及选择(三)——RPC WebServer HttpRequest RMI JMS

Tags: HttpRequest, JMS, rmi, RPC, WebServer, 远程通信


©爱上极客