i3geek.com
闫庚哲的个人博客

远程通信的方式及选择(三)——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

赞(0)
未经允许不得转载:爱上极客 » 远程通信的方式及选择(三)——RPC WebServer HttpRequest RMI JMS
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址