Java远程通讯可选技术及原理(2)

五、   Binary-RPC

Binary-RPC看名字就知道和XML-RPC是差不多的了,不同之处仅在于传输的标准格式由XML转为了二进制的格式。

同样来回答问题:

◆ 传输的标准格式是?

标准格式的二进制文件。

◆ 怎么样将请求转化为传输的流?

将二进制格式文件转化为流。

◆ 怎么接收和处理流?

通过监听的端口获取到请求的流,转化为二进制文件,根据协议获取请求的信息,进行处理并将结果写入XML中返回。

◆ 传输协议是?

Http。

六、   SOAP

SOAP原意为SimpleObject Access Protocol,是一个用于分布式环境的、轻量级的、基于XML进行信息交换的通信协议,可以认为SOAP是XML RPC的高级版,两者的原理完全相同,都是http+XML,不同的仅在于两者定义的XML规范不同,SOAP也是Webservice采用的服务调用协议标准,因此在此就不多加阐述了。

七、   CORBA

Common Object Request BrokerArchitecture(公用对象请求代理[调度]程序体系结构),是一组用来定义“分布式对象系统”的标准,由OMG(Object Menagement Group)作为发起和标准制定单位。CORBA的目的是定义一套协议,符合这个协议的对象可以互相交互,不论它们是用什么样的语言写的,不论它们运行于什么样的机器和操作系统。

CORBA在我看来是个类似于SOA的体系架构,涵盖可选的远程通信协议,但其本身不能列入通信协议这里来讲,而且CORBA基本淘汰,再加上对CORBA也不怎么懂,在此就不进行阐述了。

八、   JMS

JMS呢,是实现Java领域远程通信的一种手段和方法,基于JMS实现远程通信时和RPC是不同的,虽然可以做到RPC的效果,但因为不是从协议级别定义的,因此我们不认为JMS是个RPC协议,但它确实是个远程通信协议,在其他的语言体系中也存在着类似JMS的东西,可以统一的将这类机制称为消息机制,而消息机制呢,通常是高并发、分布式领域推荐的一种通信机制,这里的主要一个问题是容错(详细见ErLang论文)。

来看JMS中的一次远程通信的过程:

◆ 客户端将请求转化为符合JMS规定的Message;

◆ 通过JMS API将Message放入JMS Queue或Topic中;

◆ 如为JMS Queue,则发送中相应的目标Queue中,如为Topic,则发送给订阅了此Topic的JMS Queue。

处理端则通过轮训JMS Queue,来获取消息,接收到消息后根据JMS协议来解析Message并处理。

回答问题:

◆ 传输的标准格式是?

JMS规定的Message。

◆ 怎么样将请求转化为传输的流?

将参数信息放入Message中即可。

◆ 怎么接收和处理流?

轮训JMS Queue来接收Message,接收到后进行处理,处理完毕后仍然是以Message的方式放入Queue中发送或Multicast。

◆ 传输协议是?

不限。

基于JMS也是常用的实现远程异步调用的方法之一。

当然,在上面的原理中并没有介绍到所有的java领域可选的远程通信协议了,例如还有EJB采用的ORMI、Spring自己定义的一个简单的Http Invoker等等。

看完原理后我们再来看看目前java领域可用于实现远程通讯的框架或library,知名的有:JBoss-Remoting、Spring- Remoting、Hessian、Burlap、XFire(Axis)、ActiveMQ、Mina、Mule、EJB3等等,来对每种做个简单的介绍和评价,其实呢,要做分布式服务框架,这些东西都是要有非常深刻的了解的,因为分布式服务框架其实是包含了解决分布式领域以及应用层面领域两方面问题的。

当然,你也可以自己根据远程网络通信原理(transportprotocol+Net IO)去实现自己的通讯框架或library。

那么在了解这些远程通讯的框架或library时,会带着什么问题去学习呢?

◆ 是基于什么协议实现的?

◆ 怎么发起请求?

◆ 怎么将请求转化为符合协议的格式的?

◆ 使用什么传输协议传输?

◆ 响应端基于什么机制来接收请求?

◆ 怎么将流还原为传输格式的?

◆ 处理完毕后怎么回应?

九、   JBoss-Remoting

Jboss-remoting是由jboss编写的一个java领域的远程通讯框架,基于此框架,可以很简单的实现基于多种传输协议的java对象的RPC。

直接来回答问题:

◆ 是基于什么协议实现的?

JBoss-Remoting是个通讯框架,因此它支持多种协议方式的通信,例如纯粹的socket+io方式、rmi方式、http+io方式等。

◆ 怎么发起请求?

在JBoss-Remoting中,只需将需要发起的请求参数对象传入jboss-remoting的InvocationRequest对象即可,也可根据协议基于InvocationRequest封装符合需求的InvocationRequest对象。

◆ 怎么将请求转化为符合协议的格式的?

JBoss-Remoting基于Java串行化机制或JBoss自己的串行化实现来将请求转化为对象字节流。

◆ 使用什么传输协议传输?

支持多种传输协议,例如socket、http等。

◆ 响应端基于什么机制来接收请求?

响应端只需将自己的处理对象注册到JBoss-Remoting提供的server端的Connector对象中即可。

◆ 怎么将流还原为传输格式的?

JBoss-Remoting基于java串行化机制或jboss自己的串行化实现来将请求信息还原为java对象。

◆ 处理完毕后怎么回应?

处理完毕后将结果对象直接返回即可,jboss-remoting会将此对象按照协议进行序列化,返回至调用端。

另外,jboss-remoting支持多种通信方式,例如同步/异步/单向通信等。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/91583e6462ec6b7770f9cd946f6c21f0.html