Hessian原理与程序设计

1、Hessian定义

  Hessian与WebService同样,能够完成远程方法调用。Hessian的接口调用基于Http,是基于Binary-RPC协议实现,是一种二进制数据格式的交互方式,因此能够跨不一样的语言平台。html

 

2、效率比较

 RMI(Java Remote Method Invocation) Java远程方法调用,是Java自带的,只能用于Java程序之间的远程访问。git

 Httpinvoker使用Java的序列化技术传输对象,与RMI本质上是同样的,从效率上看,两者也相差无几。spring

 RMI > Httpinvoker >= Hessian >> WebService浏览器

Hessian在传输少许对象的时候,比RMI还要快速,但传输数据结构复杂的对象或大量数据对象的时候,比RMI要慢20%左右,但只是在数据量特别大的时候。安全

效率最低的就是WebService,使用的是XML,协议标准。微信

 

3、Hessian原理与协议简析

一、Hessian中Client与Server的交互是基于Http-post方式。数据结构

二、Hessian将辅助信息封装在Http-header中,好比受权token等,咱们能够基于Http-header来封装关于"安全校验""meta数据"等hessian提供了简单的"校验"机制。spring-boot

三、关于Hessian的交互核心数据,好比调用方法和参数列表信息,将经过post请求的body体直接发送,格式为字节流。post

四、对于hessian的Server端响应数据,将在Response中经过字节流的方式直接输出。spa

 

Client端:

在Client端,核心API为:

1) HessianProxyFactory: 负责托管"远程接口"和"远程hessian服务的URL",并生成代理类(Java Proxy实例)。

2) HessianProxy当代理实例的方法调用时,HessianProxy负责序列化"方法名"/"参数列表"等,并调用远程URL获取响应数据;同时也负责反序列化。

3) HessianOutput: 输出流控制,用来序列化请求的数据。负责将序列化的字节数据,按照协议,写入inputStream,并经过URL Connection发送给远端。

4) HessianInput: 输入流控制,用来反序列化响应的结果,其中包括remote端的异常栈(在client端将会被从新抛出),“Fault”信息(remote端的失败信息,好比格式错误等);不少时候,你能够经过指定http response-code值来实现特定的请求失败信号。

 

4、代码示例

 Hessian一个入门案例:https://blog.csdn.net/xzm_rainbow/article/details/17040953

 参考以上连接写了两个spring-boot工程:hessian-server、hessian-client

 FIXME具体示例代码已传到码云上:https://gitee.com/xmy_open_project/hessian

 分别启动hessian-server、hessian-client的ApplicationMain方法

 在浏览器中输入http://localhost:8080/getUser能够看到返回{"id":1,"name":"我是id:1对应的用户"}

 

 

 

参考文献
微信收藏:https://mp.weixin.qq.com/s/GaoEw-LmcFCgK0k097Pfbg
原文地址:https://blog.csdn.net/zhaifengmin/article/details/45166151

https://blog.csdn.net/xzm_rainbow/article/details/17040953

http://www.leftso.com/blog/337.html

相关文章
相关标签/搜索