您的位置: 首页 > 技术文档 > 网络编程 > Java远程通讯可选技术及原理
Ajax 的六个误区 回到列表 不用组件实现Ajax效果
 Java远程通讯可选技术及原理

作者:villa123 时间: 2008-03-10 文档类型:合作网站提供 来自:CSDN

第 1 页 Java远程通讯可选技术及原理 [1]
第 2 页 Java远程通讯可选技术及原理 [2]
第 3 页 Java远程通讯可选技术及原理 [3]

可选实现技术

当然,在上面的原理中并没有介绍到所有的java领域可选的远程通信协议了,例如还有EJB采用的ORMI、Spring自己定义的一个简单的Http Invoker等等。
看完原理后我们再来看看目前java领域可用于实现远程通讯的框架或library,知名的有:JBoss-Remoting、Spring-Remoting、Hessian、Burlap、XFire(Axis)、ActiveMQ、Mina、Mule、EJB3等等,来对每种做个简单的介绍和评价,其实呢,要做分布式服务框架,这些东西都是要有非常深刻的了解的,因为分布式服务框架其实是包含了解决分布式领域以及应用层面领域两方面问题的。
当然,你也可以自己根据远程网络通信原理(transport protocol+Net IO)去实现自己的通讯框架或library。

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

  1. 是基于什么协议实现的?
  2. 怎么发起请求?
  3. 怎么将请求转化为符合协议的格式的?
  4. 使用什么传输协议传输?
  5. 响应端基于什么机制来接收请求?
  6. 怎么将流还原为传输格式的?
  7. 处理完毕后怎么回应?

JBoss-Remoting

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

直接来回答问题:

  1. 是基于什么协议实现的?
    JBoss-Remoting是个通讯框架,因此它支持多种协议方式的通信,例如纯粹的socket+io方式、rmi方式、http+io方式等。
  2. 怎么发起请求?
    在JBoss-Remoting中,只需将需要发起的请求参数对象传入jboss-remoting的InvocationRequest对象即可,也可根据协议基于InvocationRequest封装符合需求的InvocationRequest对象。
  3. 怎么将请求转化为符合协议的格式的?
    JBoss-Remoting基于Java串行化机制或JBoss自己的串行化实现来将请求转化为对象字节流。
  4. 使用什么传输协议传输?
    支持多种传输协议,例如socket、http等。
  5. 响应端基于什么机制来接收请求?
    响应端只需将自己的处理对象注册到JBoss-Remoting提供的server端的Connector对象中即可。
  6. 怎么将流还原为传输格式的?
    JBoss-Remoting基于java串行化机制或jboss自己的串行化实现来将请求信息还原为java对象。
  7. 处理完毕后怎么回应?
    处理完毕后将结果对象直接返回即可,jboss-remoting会将此对象按照协议进行序列化,返回至调用端。

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

Spring-Remoting

Spring-remoting是Spring提供java领域的远程通讯框架,基于此框架,同样也可以很简单的将普通的spring bean以某种远程协议的方式来发布,同样也可以配置spring bean为远程调用的bean。

  1. 是基于什么协议实现的?
    和JBoss-Remoting一样,作为一个远程通讯的框架,Spring通过集成多种远程通讯的library,从而实现了对多种协议的支持,例如rmi、http+io、xml-rpc、binary-rpc等。
  2. 怎么发起请求?
    在Spring中,由于其对于远程调用的bean采用的是proxy实现,发起请求完全是通过服务接口调用的方式。
  3. 怎么将请求转化为符合协议的格式的?
    Spring按照协议方式将请求的对象信息转化为流,例如Spring Http Invoker是基于Spring自己定义的一个协议来实现的,传输协议上采用的为http,请求信息是基于java串行化机制转化为流进行传输。
  4. 使用什么传输协议传输?
    支持多种传输协议,例如rmi、http等等。
  5. 响应端基于什么机制来接收请求?
    响应端遵循协议方式来接收请求,对于使用者而言,则只需通过spring的配置方式将普通的spring bean配置为响应端或者说提供服务端。
  6. 怎么将流还原为传输格式的?
    按照协议方式来进行还原。
  7. 处理完毕后怎么回应?
    处理完毕后直接返回即可,spring-remoting将根据协议方式来做相应的序列化。

Hessian

Hessian是由caucho提供的一个基于binary-RPC实现的远程通讯library。

  1. 是基于什么协议实现的?
    基于Binary-RPC协议实现。
  2. 怎么发起请求?
    需通过Hessian本身提供的API来发起请求。
  3. 怎么将请求转化为符合协议的格式的?
    Hessian通过其自定义的串行化机制将请求信息进行序列化,产生二进制流。
  4. 使用什么传输协议传输?
    Hessian基于Http协议进行传输。
  5. 响应端基于什么机制来接收请求?
    响应端根据Hessian提供的API来接收请求。
  6. 怎么将流还原为传输格式的?
    Hessian根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。
  7. 处理完毕后怎么回应?
    处理完毕后直接返回,hessian将结果对象进行序列化,传输至调用端。

Burlap

Burlap也是有caucho提供,它和hessian的不同在于,它是基于XML-RPC协议的。

  1. 是基于什么协议实现的?
    基于XML-RPC协议实现。
  2. 怎么发起请求?
    根据Burlap提供的API。
  3. 怎么将请求转化为符合协议的格式的?
    将请求信息转化为符合协议的XML格式,转化为流进行传输。
  4. 使用什么传输协议传输?
    Http协议。
  5. 响应端基于什么机制来接收请求?
    监听Http请求。
  6. 怎么将流还原为传输格式的?
    根据XML-RPC协议进行还原。
  7. 处理完毕后怎么回应?
    返回结果写入XML中,由Burlap返回至调用端。

XFire、Axis

XFire、Axis是Webservice的实现框架,WebService可算是一个完整的SOA架构实现标准了,因此采用XFire、Axis这些也就意味着是采用webservice方式了。

  1. 是基于什么协议实现的?
    基于SOAP协议。
  2. 怎么发起请求?
    获取到远端service的proxy后直接调用。
  3. 怎么将请求转化为符合协议的格式的?
    将请求信息转化为遵循SOAP协议的XML格式,由框架转化为流进行传输。
  4. 使用什么传输协议传输?
    Http协议。
  5. 响应端基于什么机制来接收请求?
    监听Http请求。
  6. 怎么将流还原为传输格式的?
    根据SOAP协议进行还原。
  7. 处理完毕后怎么回应?
    返回结果写入XML中,由框架返回至调用端。

ActiveMQ

ActiveMQ是JMS的实现,基于JMS这类消息机制实现远程通讯是一种不错的选择,毕竟消息机制本身的功能使得基于它可以很容易的去实现同步/异步/单向调用等,而且消息机制从容错角度上来说也是个不错的选择,这是Erlang能够做到容错的重要基础。

  1. 是基于什么协议实现的?
    基于JMS协议。
  2. 怎么发起请求?
    遵循JMS API发起请求。
  3. 怎么将请求转化为符合协议的格式的?
    不太清楚,猜想应该是二进制流。
  4. 使用什么传输协议传输?
    支持多种传输协议,例如socket、http等等。
  5. 响应端基于什么机制来接收请求?
    监听符合协议的端口。
  6. 怎么将流还原为传输格式的?
    同问题3。
  7. 处理完毕后怎么回应?
    遵循JMS API生成消息,并写入JMS Queue中。

基于JMS此类机制实现远程通讯的例子有Spring-Intergration、Mule、Lingo等等。

Mina

Mina是Apache提供的通讯框架,在之前一直没有提到网络IO这块,之前提及的框架或library基本都是基于BIO的,而Mina是采用NIO的,NIO在并发量增长时对比BIO而言会有明显的性能提升,而java性能的提升,与其NIO这块与OS的紧密结合是有不小的关系的。

  1. 是基于什么协议实现的?
    基于纯粹的Socket+NIO。
  2. 怎么发起请求?
    通过Mina提供的Client API。
  3. 怎么将请求转化为符合协议的格式的?
    Mina遵循java串行化机制对请求对象进行序列化。
  4. 使用什么传输协议传输?
    支持多种传输协议,例如socket、http等等。
  5. 响应端基于什么机制来接收请求?
    以NIO的方式监听协议端口。
  6. 怎么将流还原为传输格式的?
    遵循java串行化机制对请求对象进行反序列化。
  7. 处理完毕后怎么回应?
    遵循Mina API进行返回。

MINA是NIO方式的,因此支持异步调用是毫无悬念的。

EJB

EJB最突出的在于其分布式,EJB采用的是ORMI协议,和RMI协议是差不多的,但EJB在分布式通讯的安全控制、transport pool、smart proxy等方面的突出使得其在分布式领域是不可忽视的力量。

  1. 是基于什么协议实现的?
    基于ORMI协议。
  2. 怎么发起请求?
    EJB调用。
  3. 怎么将请求转化为符合协议的格式的?
    遵循java串行化机制对请求对象进行序列化。
  4. 使用什么传输协议传输?
    Socket。
  5. 响应端基于什么机制来接收请求?
    监听协议端口。
  6. 怎么将流还原为传输格式的?
    遵循java串行化机制对请求对象进行反序列化。
  7. 处理完毕后怎么回应?
    直接返回处理对象即可。

在之前的分布式服务框架系列的文章中对于jndi有误导的嫌疑,在这篇blog中也顺带的提下jndi的机制,由于JNDI取决于具体的实现,在这里只能是讲解下jboss的jndi的实现了。

在将对象实例绑定到jboss jnp server后,当远程端采用context.lookup()方式获取远程对象实例并开始调用时,jboss jndi的实现方法是从jnp server上获取对象实例,将其序列化回本地,然后在本地进行反序列化,之后在本地进行类调用。
通过这个机制,就可以知道了,本地其实是必须有绑定到jboss上的对象实例的class的,否则反序列化的时候肯定就失败了,而远程通讯需要做到的是在远程执行某动作,并获取到相应的结果,可见纯粹基于JNDI是无法实现远程通讯的。
但JNDI也是实现分布式服务框架一个很关键的技术点,因为可以通过它来实现透明化的远端和本地调用,就像ejb,另外它也是个很好的隐藏实际部署机制(就像datasource)等的方案。

总结

由上一系列的分析可知,在远程通讯领域中,涉及的知识点还是相当的多的,例如有:通信协议(Socket/tcp/http/udp/rmi/xml-rpc etc.)、消息机制、网络IO(BIO/NIO/AIO)、MultiThread、本地调用与远程调用的透明化方案(涉及java classloader、Dynamic Proxy、Unit Test etc.)、异步与同步调用、网络通信处理机制(自动重连、广播、异常、池处理等等)、Java Serialization (各种协议的私有序列化机制等)、各种框架的实现原理(传输格式、如何将传输格式转化为流的、如何将请求信息转化为传输格式的、如何接收流的、如何将流还原为传输格式的等等),要精通其中的哪些东西,得根据实际需求来决定了,只有在了解了原理的情况下才能很容易的做出选择,甚至可以根据需求做私有的远程通讯协议,对于从事分布式服务平台或开发较大型的分布式应用的人而言,我觉得至少上面提及的知识点是需要比较了解的。

参考文档(感谢这些文章)
RMI原理及实现http://www.yesky.com/274/1625274.shtml
Java NIO原理和使用
http://www.jdon.com/concurrent/nio%D4%AD%C0%ED%D3%A6%D3%C3.htm
XML RPC协议http://hedong.3322.org/archives/000470.html
http://www.mengyan.org/blog/archives/2005/07/12/30.html
Spring技术应用中的远程服务详解http://www.builder.com.cn/2007/1027/583384.shtml
JAVA RPC通信机制之SOAPhttp://www.java114.com/content16/content3826.html
Java Remoting:Protocol BenchMarkshttp://q.sohu.com/forum/5/topic/1148909
Evalution of RMI Alternativehttps://www.jfire.org/modules/phpwiki/index.php/Evaluation%20of%20RMI%20Alternative
Metaprotocol Taxonomyhttp://hessian.caucho.com/doc/metaprotocol-taxonomy.xtp
什么是Webservicehttp://www.vchome.net/dotnet/webservice/webservice15.htm

本文链接:http://www.blueidea.com/tech/program/2008/5438.asp 

出处:CSDN
责任编辑:bluehearts

上一页 Java远程通讯可选技术及原理 [2] 下一页

◎进入论坛网络编程版块参加讨论

相关文章 更多相关链接
基于flash的360虚拟现实引擎实现
FLASH与ASP通信原理入门
你的编程语言可以这样做吗?
flash电子书鼠标拖拽翻页效果原理
Fireworks通道原理及快捷运用
热门搜索:CSS Fireworks 设计比赛 网页制作 Dreamweaver Studio8 Flash
站点最新 站点最新列表
疯狂的程序员 第五十回
疯狂的程序员 第四十九回
疯狂的程序员 第四十八回
疯狂的程序员 第四十七回
疯狂的程序员 第四十六回
疯狂的程序员 第四十五回
疯狂的程序员 第四十四回
疯狂的程序员 第四十三回
疯狂的程序员 第四十二回
疯狂的程序员 第四十一回
栏目最新 栏目最新列表
火星人的耳机
公司正式宣布创业失败
用corelDEAW 12打造唇膏
二行代码解决全部网页木马
一行代码解决iframe挂马
Photoshop制作星空爆炸效果
CorelDraw 12打造休闲裤
Firework如何画特殊的切角图形
Firework打造韩式风格的手提袋
flash实例:打造佛光效果
>> 分页 首页 前页 后页 尾页 页次:3/31个记录/页 转到 页 共3个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

本文暂时没有评论和评分

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
大师之路--Photoshop 完全解析
《超越CSS》新书上市
Don't Make Me Think 第2版
HTML与CSS入门经典(第7版)
《FLASH MX2004网站开发精粹》
《CSS入门经典》
《设计师谈网页设计思维》
作品集 更多内容

字号 最近的作品—COPPERHEAD 三星U3产品形象广告 网站设计 基金会网站设计 我们的寝室 無瞳 二七广场的这些孩子