`
biejunbo
  • 浏览: 17244 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

对Hessian的理解!

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

  1、是基于什么协议实现的?

           基于Binary-RPC协议实现。

  2、怎么发起请求?

           需通过Hessian本身提供的API来发起请求。

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

           Hessian通过其自定义的串行化机制将请求信息进行序列化,产生二进制流。

  4、使用什么传输协议传输?

           Hessian基于Http协议进行传输。

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

           响应端根据Hessian提供的API来接收请求。

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

           Hessian根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。

  7、处理完毕后怎么回应?

           处理完毕后直接返回,hessian将结果对象进行序列化,传输至调用端。

二、Hessian 调用实例

a)         编写服务端代码

写一个接口:

public interface Hello {

    public String seeHello();

}

编写一个实现:

public class HelloImpl implements Hello {



    private String helloStr = “Hello World”;



    public String getHelloStr() {

       return helloStr;

    }
    public void setHelloStr(String helloStr) {

       this.helloStr = helloStr;

    }
    public String seeHello() {

       return helloStr;

    }
}

配置WEB-INF.xml 部署到Web容器中:

         <servlet>  

             <servlet-name>hello</servlet-name>  

             <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>  

             <init-param>  

                 <param-name>home-class</param-name>  

                 <param-value>com.alisoft.enet.hessian.HelloImpl</param-value>  

             </init-param>  

             <init-param>  

                 <param-name>home-api</param-name>  

                 <param-value>com.alisoft.enet.hessian.Hello</param-value>  

             </init-param>  

         </servlet>      

  

         <servlet-mapping>  

             <servlet-name>hello</servlet-name>  

             <url-pattern>/hello.xsp</url-pattern>  

         </servlet-mapping> 

            Ok,服务端代码编写完毕。

        

b)         编写客户端代码



public class HelloServiceTest {



  public static void main(String[] args) throws Exception {

    

     String url = “http://localhost/hessian/hello.xsp”;



     HessianProxyFactory factory = new HessianProxyFactory();

     Hello hello = (Hello) factory.create(Hello.class, url);



     System.out.println(“远程调用结果: “ + hello.seeHello());



  }

}

执行客户端,即可返回相应的结果:
远程调用结果: Hello World        
上面的例子是基于 caucho 提供的Hessian 包的基础上做的,实际上Spring的Hessian调用只是对这个进行简单的封装,便于使用。
三、Hessian机制
  那么Hessian就是把Java对象转变成 字节序列,然后通过Http传输到 目标服务器上(主机2),主机2收到这个字节序列后,按照一定的协议标准进行反序列,提交给对应的服务处理。处理完成以后以同样的方式返回数据。



现在我们回头看看例子中的配置(WEB-INF.XML):

配置的Servlet: com.caucho.hessian.server.HessianServlet

对应的参数:接口(home-api):com.alisoft.enet.hessian.Hello

                            实现(home-class): com.alisoft.enet.hessian.HelloImpl
HessianServlet 中的实现代码如下(略过部分代码):



HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;

InputStream is = request.getInputStream();
OutputStream os = response.getOutputStream();

//输入流
Hessian2Input in = new Hessian2Input(is);
SerializerFactory serializerFactory = getSerializerFactory();
in.setSerializerFactory(serializerFactory);

//输出流
AbstractHessianOutput out;
int major = in.read();
int minor = in.read();
out = new Hessian2Output(os);

out.setSerializerFactory(serializerFactory);

_homeSkeleton.invoke(in, out);



整个执行步骤如下:

l  接收输入流,并通过SerializerFactory转化为 Hessian 特有的 Hessian2Input

l  设置输出流,并通过SerializerFactory转化为 Hessian 特有的 Hessian2Output

l  根据配置的接口和实现参数,调用服务,并把结果写入到输出流 Hessian2Output中

l   Out.close()



Hessian远程访问基于序列化和反序列化的方式。当程序运行时,程序所创建的各种对象都位于内存中,当程序运行结束,这些对象就结束了生命周期。对象的序列化主要有两种用途:

l  把对象的字节序列永久地保存到硬盘上,通常是放在一个文件中。

l  在网络上传输对象的字节序列

分享到:
评论

相关推荐

    Hessian

    **Hessian:深入理解与应用** Hessian是一种二进制Web服务协议,它由Caucho Technology公司开发,主要用于提供轻量级、高效的远程方法调用(Remote Method Invocation,RMI)服务。Hessian的目标是简化分布式系统...

    hessian案例,hessian案例

    以下是对Hessian技术及其应用的详细解释: 1. **Hessian简介**:Hessian是由Caucho Technology开发的一种二进制Web服务协议,它提供了简洁、快速的数据传输方式,尤其适用于低带宽环境。Hessian支持RPC模式,允许...

    Hessian 使用小结

    Hessian是一种轻量级的二进制远程过程调用(RPC)协议,它基于HTTP,并且通常通过Servlet来暴露Web服务。Hessian的设计目标是为了提供...通过这些资源,开发者可以更深入地理解并应用Hessian在实际项目中的各种场景。

    Hessian多个版本打包下载

    在实际应用中,理解每个版本的特点和改进,能够帮助我们做出明智的决策,确保系统的稳定性和效率。 在使用这些Hessian版本时,开发者还需要关注如何正确地配置和集成到自己的项目中。这包括设置服务器端和客户端的...

    Hessian应用

    为了更好地理解Hessian,我们可以查看"45664572-AD83-4BE3-B990-0A58EFC5B47B.bmp"这个图片文件,它可能是一个示例服务的配置图或者工作流程图,帮助我们直观地了解Hessian在实际项目中的部署和运行情况。...

    hessian

    Hessian是一种二进制Web服务协议,由Caucho ...理解和使用Hessian可以帮助我们构建更快速、更灵活的远程服务调用系统。通过深入研究源码和利用相关工具,我们可以更好地利用Hessian的优势来优化我们的应用程序。

    基于Hessian矩阵增强的心血管分割_hessian_hessian血管_hessian血管分割_血管分割_Hessian矩阵

    在IT领域,尤其是在医学图像分析中,Hessian矩阵是一个重要的数学工具,用于图像特征检测,特别是在血管分割的...通过理解和应用Hessian矩阵,可以开发出高效、精确的自动分割算法,这对医学图像分析领域具有重大意义。

    dubbo-hessian协议http请求demo(java)

    首先,我们需要理解Hessian协议的基本原理。Hessian是一种高效的序列化协议,它将Java对象转换为二进制流,通过网络传输,然后在另一端还原为原来的对象。相比基于文本的XML或JSON,Hessian传输的数据量更小,性能更...

    hessian-4.0.33.jar

    《深入理解Hessian框架:以hessian-4.0.33.jar为例》 Hessian是一种高效的二进制RPC(Remote Procedure Call)协议,由Caucho Technology开发,旨在提供轻量级、高效的远程调用服务。在这个专题中,我们将以hessian...

    hessian学习基础篇——序列化和反序列化

    理解并掌握Hessian的基本概念和使用方法,能够提升我们的开发效率,优化应用程序的性能。在实际项目中,结合标签中的“源码”和“工具”,深入研究Hessian的源码和相关工具,可以帮助我们更好地应用这一技术。而...

    Hessian学习简单demo

    通过实践这个示例,你可以更深入地理解Hessian如何工作,以及如何在实际项目中应用它。 总的来说,Hessian提供了高效、轻量级的跨语言通信解决方案,尤其适合对性能有较高要求的场景。通过学习和实践这个Hessian ...

    hessian服务端 客户端 可运行

    通过这个示例,你可以深入理解如何在Java环境中搭建和使用Hessian服务,以及如何在客户端进行远程调用,这对于理解和应用RPC技术是非常有价值的。同时,这也展示了Hessian在实现高效、轻量级的分布式系统中的潜力。

    Hessian 学习 例子 实例

    3. **优化的字节码表示**:Hessian尽可能地减少不必要的字节,例如,它对常见值(如零、空字符串)有特殊的编码,以进一步减小数据体积。 接下来,我们通过一个简单的实例来加深理解。假设我们有一个`Person`类,...

    Hessian协议格式

    Hessian 协议格式 Hessian 协议是一种轻量级的 remoting on http 工具,使用简单的方法...通过对 Hessian 协议报文格式的分析,我们可以更好地理解 Hessian 协议的工作原理,并更好地应用 Hessian 协议在实际项目中。

    Spring中集成Hessian的问题

    Hessian的源码分析可以帮助我们更深入地理解其工作原理。Hessian服务端的序列化和反序列化过程、HTTP请求处理以及异常处理等都是关键部分。而Spring框架如何与Hessian进行集成,包括服务注册、请求处理和代理创建等...

    理解RESTful架构、Hessian简介、机制、Webservice及cxf介绍

    它提供了高效的远程调用能力,相比基于文本的协议(如SOAP),Hessian能更节省带宽和提高通信效率。Hessian库可以在不同平台上使用,支持多种编程语言,简化了跨语言的远程服务调用。 WebService是一种基于XML的、...

    springMVC hessian

    首先,让我们深入理解 SpringMVC。SpringMVC 提供了一个灵活的架构,用于处理 HTTP 请求、路由请求到相应的处理器、模型数据的绑定、视图渲染等。它使用依赖注入(DI)和面向切面编程(AOP)来简化应用开发,使得...

    基于matlab使用 hessian 特征值增强 2D3D 图像中的血管脊状结构

    首先,我们要理解Hessian矩阵。在二维图像中,Hessian矩阵由三个二阶偏导数组成,即H = [Ixx Ixy; Ixy Iyy],其中Ixx, Iyy是沿着x和y方向的二阶导数,Ixy是它们的交叉导数。在三维图像中,Hessian矩阵则扩展为一个4x...

    hessian使用小例子

    首先,我们来理解一下Hessian的工作原理。Hessian基于HTTP协议,它将Java对象转换为二进制流进行传输,减少了网络传输的数据量,同时也提高了序列化和反序列化的速度。与传统的基于XML的Web服务相比,Hessian在处理...

    hessian-example

    在实际项目中,Hessian适用于那些对性能要求较高,但又希望保持简单接口的场景。例如,内部系统间的通信、移动应用与后端服务器的交互,或者是跨语言的微服务通信。Hessian的轻量级特性使得它成为低延迟、高吞吐量...

Global site tag (gtag.js) - Google Analytics