`

Hessian 简介

阅读更多

一.     Hessian 简介

 

Hessian 是由 caucho 提供的一种开源的远程通讯协议。 Hessian 采用二进制 RPC 协议,基于 HTTP 传输,服务器端不用开放防火墙端口。 Hessian 协议的规范是公开的,可以用于任意语言。

二.        Hessian 实现

a)        基本实现

服务器端:

定义接口: Hello, World API

public interface BasicAPI {

  public String hello();

}

接口实现: Hello, World Service

public class BasicService implements BasicAPI {

  private String _greeting = "Hello, world";

 

  public void setGreeting(String greeting)

  {

    _greeting = greeting;

  }

 

  public String hello()

  {

    return _greeting;

  }

}

配置 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.xiaonei.jebe.hessian.BasicService</param-value>  

             </init-param>  

             <init-param>  

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

                 <param-value>com.xiaonei.jebe.hessian.BasicAPI</param-value>  

              </init-param>

         </servlet>

  

         <servlet-mapping>  

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

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

         </servlet-mapping>

客户端:

String url = "http://hessian.caucho.com/hessian/hello.htm";

 

HessianProxyFactory factory = new HessianProxyFactory();

BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);

 

System.out.println("hello(): " + basic.hello());

b)       与 spring 的整合

Hessian 通过 Servlet 提供远程服务。需要将匹配某个模式的请求映射到 Hessian 服务。 Spring 的 DispatcherServlet 可以完成该功能, DispatcherServlet 可将匹配模式的请求转发到 Hessian 服务, web.xml 只是定义了“请求转发器”,该转发器将匹配 /remoting/* 的请求截获,转发给 context 的 bean 处理。而 HessianServiceExporter 提供 bean 服务。

可以总结为两步:

1.      拦截 url 请求

2.      HessianServiceExporter 提供 bean 服务, Spring 使用 HessianServiceExporter ,将一个常规 bean 导出成 Hessian 服务。

 

服务器端设置:

web.xml 的详细配置

<servlet>

           <servlet-name>remoting</servlet-name>

  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

           <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

           <servlet-name>remoting</servlet-name>

           <url-pattern>/remoting/*</url-pattern>

</servlet-mapping>

配置 remoting-servlet.xml 文件

<!--  定义普通 bean 实例 -->

    <bean id="hello" class=" com.xiaonei.jebe.hessian.BasicService "/>

    <!--  使用 HessianServiceExporter 将普通 bean 导出成 Hessian 服务 -->

    <bean name="/hello" class="org.springframework.remoting.caucho.HessianServiceExporter">

           <!--  需要导出的目标 bean-->

           <property name="service" ref="hello"/>

           <!--  Hessian 服务的接口 -->

            <property name="serviceInterface" value=" com.xiaonei.jebe.hessian.BasicAPI "/>

</bean>

 

客户端设置:

客户端定义一个 remoting-client.xml 文件

<bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">

<property name="serviceUrl">

<value> http://hessian.caucho.com/hessian/hello.htm</value>

</property>

<property name="serviceInterface">

<value> com.xiaonei.jebe.hessian.BasicAPI </value>

</property>

</bean>

c)        与 OSGi ( spring dm server )的整合

请参见文档 《 Hessian与 OSGi( spring dm server)的整合》

三.        Hessian 原理

请参见文档 《 Hessian原理分析》

四.        Hessian 和其他远程调用实现的比较

1.       常见远程通讯协议:

RMI 、 Httpinvoker 、 Hessian 、 Burlap 、 Web service

通讯效率测试结果:

RMI > Httpinvoker >= Hessian >> Burlap >> Web service

2.       各个通讯协议的分析:

RMI 是 Java 首选远程调用协议,非常高效稳定,特别是在数据结构复杂,数据量大的情况下,与其他通讯协议的差距尤为明显。

HttpInvoker 使用 java 的序列化技术传输对象,与 RMI 在本质上是一致的。从效率上看,两者也相差无几, HttpInvoker 与 RMI 的传输时间基本持平。

Hessian 在传输少量对象时,比 RMI 还要快速高效,但传输数据结构复杂的对象或大量数据对象时,较 RMI 要慢 20% 左右。但这只是在数据量特别大,数据结构很复杂的情况下才能体现出来,中等或少量数据时, Hessian 并不比 RMI 慢。 Hessian 的好处是精简高效,可以跨语言使用,而且协议规范公开,我们可以针对任意语言开发对其协议的实现。

另外, Hessian 与 WEB 服务器结合非常好,借助 WEB 服务器的成熟功能,在处理 大量用户并发访问时会有很大优势,在资源分配,线程排队,异常处理等方面都可以由成熟的 WEB 服务器保证。而 RMI 本身并不提供多线程的服务器。而 且, RMI 需要开防火墙端口, Hessian 不用。

Burlap 采用 xml 格式传输。仅在传输 1 条数据时速度尚可,通常情况下,它的毫时是 RMI 的 3 倍。

Web Service 的效率低下是众所周知的,平均来看, Web Service 的通讯毫时是 RMI 的 10 倍。

 

五.        Hessian 使用感受

在本次的系统中大量使用 hessian 进行远程通讯。系统环境是 OSGi 实现 spring dm server 。

在使用中,我们发现 hessian 的确精简很容易使用,而且效率很高,基本可以满足系统需求。但是我们也发现了很多不足,有 hessian 特有的也有 hessian 和 OSGi ( spring dm server )整合后造成的。

 

优点:

1.         简单易用

2.         效率高

缺点:

1.         报错机制不够完善。在开发过程中发现 hessian 总是报一些错误,错误原因也是千奇百怪。当然,有可能是前期大家对 hessian 理解不够深刻,但是也确实暴露出来 hessian 的一些问题。

解决方案有:加深对 hessian 实现机制的理解;总结 hessian 出错的原因,每种错误可以列举出几种原因,便于以后查找。

2.         事务处理。至今还没有针对 hessian 服务的有效的事务处理机制,大家提出了几种实现方案,但都不是很合适,需要继续研究。

3.         版本问题:在开发过程中,发现 springsource 的 bundle 库中最新的版本是 3.2.1 ,但是 3.2.1 和 spring2.5 存在兼容问题,现在可用的版本有 3.1.5 、 3.1.6 、 3.2.0 。而在 hessian 官网发现最新版本为 4.0.1 ,但 4.0.1 没有 bundle 形式 jar 包。


本文来自CSDN博客,转载出处:http://blog.csdn.net/zhtang0526/archive/2009/11/10/4788853.aspx

分享到:
评论

相关推荐

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

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

    hessian案例,hessian案例

    1. **Hessian简介**:Hessian是由Caucho Technology开发的一种二进制Web服务协议,它提供了简洁、快速的数据传输方式,尤其适用于低带宽环境。Hessian支持RPC模式,允许服务端和客户端之间进行方法调用。 2. **Java...

    利用hessian进行系统通信实例教程

    一、Hessian简介 Hessian是由Caucho公司开发的一种轻量级的Web服务协议,它的主要特点是使用二进制格式传输数据,相比XML或JSON,其在网络传输中具有更高的效率和更快的速度。Hessian支持Java、C++、Python等多种...

    android端使用hessian跟web服务器通讯

    一、Hessian简介 Hessian是由Caucho公司开发的一种轻量级的二进制Remoting协议,它提供了高效的序列化和反序列化机制,使得跨平台的远程方法调用(RMI)变得更加便捷。Hessian支持HTTP传输,可以在防火墙开放的HTTP...

    Hessian(Spring集成的)的应用与研究

    一、Hessian简介 Hessian是一种基于HTTP的二进制协议,它以简洁的二进制格式传输数据,相比于XML-RPC或JSON-RPC等文本协议,Hessian具有更高的传输效率和更快的解析速度。Hessian支持Java、C++、Python等多种语言,...

    hessian+spring小案例

    #### 一、Hessian简介 Hessian是一个轻量级的远程服务调用框架,其核心功能是提供类似于RMI(远程方法调用)的服务,但采用的是更为高效的二进制RPC(远程过程调用协议)。这使得Hessian非常适合用于传输大量的二...

    hessian+spring

    #### 一、Hessian简介 Hessian是一个轻量级的远程服务调用框架,其主要特点在于采用高效的二进制格式进行数据传输,这使得它非常适合处理大量的二进制数据。Hessian通过HTTP协议进行通信,并且支持多种编程语言。它...

    WebService另一种轻量级实现—Hessian 学习笔记.rar

    **一、Hessian简介** Hessian是由Caucho Technology公司开发的一种二进制RPC(Remote Procedure Call)协议,它能够将Java对象序列化为高效的二进制格式,从而显著减少网络传输的数据量。Hessian支持HTTP协议,可以...

    使用hessian简单使用【续】- 与spring结合使用

    一、Hessian简介 Hessian是由Caucho公司开发的一种基于HTTP的二进制RPC(Remote Procedure Call)协议,它以简洁的二进制格式传输数据,从而提高了网络通信效率。Hessian协议支持Java、.NET、Python等多种语言,使得...

    hessian-4.0.33.jar

    一、Hessian协议简介 Hessian协议基于HTTP协议,但其数据传输采用二进制格式,这使得它在数据传输效率上远超基于文本的XML或JSON协议。Hessian支持多种类型的数据序列化,包括基本类型、对象、数组、日期等,并且...

    jinrongjuServer

    二、Hessian简介 Hessian是由Caucho公司开发的一种二进制RPC协议,它通过HTTP协议传输,具有序列化速度快、传输数据量小的特点。Hessian支持Java、C++、Python等多种语言,使得不同平台和语言之间的通信变得简单。 ...

    hessin+spring实例

    #### 一、Hessian简介 Hessian是一种轻量级的远程过程调用(RPC)协议,相比传统的WebService技术,Hessian提供了更简单且高效的方式来实现分布式应用间的通信。Hessian的核心优势在于其采用了二进制RPC协议(Binary ...

    Hessian的学习笔记

    一、简介 Hessian是基于Binary-RPC协议实现的远程通讯library,用于实现远程过程调用(RPC)。Hessian提供了一个轻量级的RPC解决方案,支持多种编程语言,并且具有高性能和可扩展性。 二、Hessian的工作原理 ...

    Hessian矩阵与牛顿法.pdf

    #### 二、Hessian矩阵简介 **定义**:Hessian矩阵是多元函数二次导数的矩阵表示形式。对于一个具有两个变量\( x_1 \)和\( x_2 \)的函数\( f(x_1, x_2) \),其Hessian矩阵\( H(f) \)定义为: \[ H(f) = \begin{b...

    hessian例子

    ### Hessian协议简介 Hessian协议是基于HTTP的,它通过二进制编码来提高数据传输效率,相比于XML或JSON等文本格式,Hessian在数据量和传输速度上有显著优势。Hessian协议支持基本类型(如整型、浮点型、字符串等)...

    frangi_hessian.rar

    一、Frangi-Hessian算法简介 Frangi-Hessian算法是Frangi在1998年提出的一种针对血管检测的特征提取方法。该算法的核心在于利用Hessian矩阵,它是图像二阶导数的表示,可以捕捉图像中的局部特征。Hessian矩阵H的...

    hessian小实例

    一、Hessian协议简介 Hessian是一种轻量级的序列化和通信协议,它的主要特点是: 1. **二进制格式**:Hessian使用二进制格式传输数据,相比XML或JSON等文本格式,占用带宽更少,传输速度更快。 2. **自动类型检测**...

    外部接口调用 使用spring4+hessian4实例(二)

    一、Spring 4与Hessian 4简介 Spring 4是Spring框架的一个版本,它提供了一整套企业级应用开发的支持,包括依赖注入、AOP(面向切面编程)、数据访问、事务管理等。Hessian 4则是一种二进制Web服务协议,它能高效地...

    Nacos JRaft Hessian 反序列化 RCE 分析.pdf

    1. **反序列化简介**: - 序列化是指将对象的状态信息转换为可以存储或传输的形式的过程;而反序列化则是指将序列化的数据恢复为对象的过程。 - 在 Java 中,可以利用 `java.io.Serializable` 接口实现对象的序列...

    dubbo-2.5.3版本及构建工具依赖

    - **简介**:Hessian是一种二进制的Web服务协议,由Caucho公司开发。Hessian-lite是Hessian的轻量级实现,专为Java设计,用于减少网络传输的数据量,提高服务调用效率。 - **功能**:Hessian-lite使得远程调用更加...

Global site tag (gtag.js) - Google Analytics