HESSIAN的技术实现简介

Hessian是一个基于HTTP协议的轻量级远程调用工具,使用二进制RPC协议进行数据传输。它通过二进制编码简化客户端与服务器之间的交互,提供类似于RMI的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 基本介绍

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。采用二进制RPC协议进行数据传输。

 

  • 实现原理

Hessian依托HTTP协议,在其上发送二进制数据信息,其使用的ContentTypex-application/hessian。

客户端代理用户的请求,将调用的方法和参数值进行二进制编码,通过指定的URL打开HTTP连接,将数据传输到服务器端。服务器端URL对应的Servlet接收到数据后,进行解析,交给具体实现类完成调用,然后将返回值编码发回客户端。

  • 客户端实现

通过HessianProxyFactory.create()方法,产生用户指定Interface的实例。具体实例的实现由JDK的Proxy代理机制来负责。在Proxy生成实例时,传入的InvocationHandler接口实例为HessianProxy。

当客户端调用时,所有的操作都由HessianProxy来负责:主要是将调用的方法、参数写入到URL指定的连接中。然后对返回的数据进行解析,返回给用户。

其主要方法实现:

public Object invoke(Object proxy, Method method, Object []args) {
          ....
               conn = sendRequest(mangleName, args);
                is =getInputStream(conn);
               ....
                int code =is.read();
              .....
}


  • 服务器实现

服务器端的入口类为HessianServlet,它通过ServletConfig中的home-class参数,获取具体功能的实现类名,并生成实例。通过home-api参数,获取实现的接口类。然后接受客户端的POST请求,将请求中的数据交给HessianSkeleton处理。

HessianSkeleton是服务器端的核心处理类,它持有home-class具体实现类实例,并将home-api指定的类中的方法全部进行缓存。其处理调用请求的过程如下:

1.      从请求中解析出方法名(string)和参数值。

2.      从缓存中获取到对应的方法(Method),然后调用home-class实例中的对应实现方法:method.invoke(service,values)

3.      如果获取不到对应的方法(即home-api接口中没有定义),将向连接中写入错误信息:NoSuchMethodException

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值