Java 远程通讯技术及原理分析( 六 )

  • 怎么将请求转化为符合协议的格式的?
  • 使用什么传输协议传输?
  • 响应端基于什么机制来接收请求?
  • 怎么将流还原为传输格式的?
  • 处理完毕后怎么回应?
  •  
    5.1 Spring-Remoting
    Spring-remoting是Spring提供java领域的远程通讯框架,基于此框架,同样也可以很简单的将普通的spring bean以某种远程协议的方式来发布,同样也可以配置spring bean为远程调用的bean 。
    1. 是基于什么协议实现的?作为一个远程通讯的框架,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将根据协议方式来做相应的序列化 。
     
    5.2 Hessian
    Hessian是由caucho提供的一个基于binary-RPC实现的远程通讯library 。
    1. 是基于什么协议实现的?基于Binary-RPC协议实现 。
    2. 怎么发起请求?需通过Hessian本身提供的API来发起请求 。
    3. 怎么将请求转化为符合协议的格式的?Hessian通过其自定义的串行化机制将请求信息进行序列化,产生二进制流 。
    4. 使用什么传输协议传输?Hessian基于Http协议进行传输 。
    5. 响应端基于什么机制来接收请求?响应端根据Hessian提供的API来接收请求 。
    6. 怎么将流还原为传输格式的?Hessian根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了 。
    7. 处理完毕后怎么回应?处理完毕后直接返回,hessian将结果对象进行序列化,传输至调用端 。
     
    5.3 Burlap
    Burlap也是有caucho提供,它和hessian的不同在于,它是基于XML-RPC协议的 。
    1. 是基于什么协议实现的?基于XML-RPC协议实现 。
    2. 怎么发起请求?根据Burlap提供的API 。
    3. 怎么将请求转化为符合协议的格式的?将请求信息转化为符合协议的XML格式,转化为流进行传输 。
    4. 使用什么传输协议传输?Http协议 。
    5. 响应端基于什么机制来接收请求?监听Http请求 。
    6. 怎么将流还原为传输格式的?根据XML-RPC协议进行还原 。
    7. 处理完毕后怎么回应?返回结果写入XML中,由Burlap返回至调用端 。
     
    5.4 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中,由框架返回至调用端 。
     
    5.5 ActiveMQ
    ActiveMQ是JMS的实现,基于JMS这类消息机制实现远程通讯是一种不错的选择,毕竟消息机制本身的功能使得基于它可以很容易的去实现同步/异步/单向调用等,而且消息机制从容错角度上来说也是个不错的选择,这是Erlang能够做到容错的重要基础 。
    1. 是基于什么协议实现的?基于JMS协议 。
    2. 怎么发起请求?遵循JMS API发起请求 。
    3. 怎么将请求转化为符合协议的格式的?不太清楚,猜想应该是二进制流 。
    4. 使用什么传输协议传输?支持多种传输协议,例如socket、http等等 。
    5. 响应端基于什么机制来接收请求?监听符合协议的端口 。
    6. 怎么将流还原为传输格式的?同问题3 。


      推荐阅读