`

Hessian相关(转载)

    博客分类:
  • JAVA
阅读更多

Hessian is a simple binary protocol for connecting web services. The com.caucho.hessian.client and com.caucho.hessian.server packages do not require any other Resin classes, so can be used in smaller clients, like applets.

利用Hessian 实现webService的发布是一种很简单的方式,下面写个简单的例子。

1. 编写要发布的服务接口

Java代码 复制代码
  1. package com.lht;   
  2.   
  3. public interface ISomeService {   
  4. public String hello();   
  5. public int add(int a,int b);   
  6. }  
package com.lht;

public interface ISomeService {
public String hello();
public int add(int a,int b);
}



2. 编写实现类

Java代码 复制代码
  1. package com.lht;   
  2.   
  3. public class SomeServiceImpl implements ISomeService {   
  4.   
  5.     public String hello() {   
  6.         // TODO Auto-generated method stub   
  7.         return "hello HessianDemo";   
  8.     }   
  9.   
  10.     public int add(int a, int b) {   
  11.         // TODO Auto-generated method stub   
  12.         return a+b;   
  13.     }   
  14. }  
package com.lht;

public class SomeServiceImpl implements ISomeService {

	public String hello() {
		// TODO Auto-generated method stub
		return "hello HessianDemo";
	}

	public int add(int a, int b) {
		// TODO Auto-generated method stub
		return a+b;
	}
}




3. 配置信息

Xml代码 复制代码
  1. <web-app>  
  2. <servlet>  
  3.    <servlet-name>hello</servlet-name>  
  4.    <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>  
  5.     <init-param>  
  6.       <param-name>home-class</param-name>  
  7.       <param-value>example.BasicService</param-value>  
  8.     </init-param>  
  9.     <init-param>  
  10.       <param-name>home-api</param-name>  
  11.       <param-value>example.Basic</param-value>  
  12.     </init-param>  
  13.   </servlet>  
  14.   <servlet-mapping>  
  15.     <url-pattern>/hello</url-pattern>  
  16.     <servlet-name>hello</servlet-name>  
  17.   </servlet-mapping>  
  18.      
  19. </web-app>  
<web-app>
<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>example.BasicService</param-value>
    </init-param>
    <init-param>
      <param-name>home-api</param-name>
      <param-value>example.Basic</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <url-pattern>/hello</url-pattern>
    <servlet-name>hello</servlet-name>
  </servlet-mapping>
  
</web-app>



总结:
利用Hessian  实现分布式,变的相当的简单,就和开发简单的servlet一般。

Hessian的这个远程过程调用,完全使用动态代理来实现的,其实从客户端代码不难看出,HessianProxyFactory的create方法就是创建接口Basic的代理类,该类实现了Basic接口,JDK的proxy类会自动用 InvocationHandler 的实现类(该类在Hessian中表现为HessianProxy)的invoke方法体 来填充所生成代理类的方法体,从而实现远程调用,传输过程使用的是基于Http的二进制字节流。

RMI与Hessian的调用过程比较:
Hessian:客户端(basic.hello())——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果
RMI:客户端——>stub——>序列化——>skeleton——>远程方法——>序列化——>stub—— >输出结果

参考信息
1.http://hessian.caucho.com/
2.http://eis.blogdriver.com/eis/331413.html

 

 

几种基于HTTP协议的RPC性能比较

关键字: burlap hessian

有了整体的了解后,可以发现Hessian的这个远程过程调用,完全使用动态代理来实现的,其实从客户端代码不难看出,HessianProxyFactory的create方法就是创建接口Basic的代理类,该类实现了Basic接口,JDK的proxy类会自动用 InvocationHandler 的实现类(该类在Hessian中表现为HessianProxy)的invoke方法体 来填充所生成代理类的方法体,从而实现远程调用,传输过程使用的是基于Http的二进制字节流。

RMI与Hessian的调用过程比较:
Java代码 复制代码
  1. Hessian:客户端(basic.hello())——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果   
  2. RMI:客户端——>stub——>序列化——>skeleton——>远程方法——>序列化——>stub—— >输出结果  
Hessian:客户端(basic.hello())——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果
RMI:客户端——>stub——>序列化——>skeleton——>远程方法——>序列化——>stub—— >输出结果


服务端的是一个简单的加密、解密方法,各种协议使用同一个实现的代码。
客户端是独立的java程序,分别用各种协议对服务端的方法进行调用。每一种协议循环调用n次,然后取平均值。

循环1,000次的测试
第一次

Java代码 复制代码
  1. Axis --------------->> Total time: 11123 ms, Avg time: 11.123 ms   
  2. Burlap ------------->> Total time:   866 ms, Avg time:  0.866 ms   
  3. Hessian ------------>> Total time:   581 ms, Avg time:  0.581 ms   
  4. REST --------------->> Total time:   929 ms, Avg time:  0.929 ms   
  5. AxisUsingWSDL2Java ->> Total time: 11998 ms, Avg time: 11.998 ms  
Axis --------------->> Total time: 11123 ms, Avg time: 11.123 ms
Burlap ------------->> Total time:   866 ms, Avg time:  0.866 ms
Hessian ------------>> Total time:   581 ms, Avg time:  0.581 ms
REST --------------->> Total time:   929 ms, Avg time:  0.929 ms
AxisUsingWSDL2Java ->> Total time: 11998 ms, Avg time: 11.998 ms


第二次

Java代码 复制代码
  1. Axis --------------->> Total time: 11256 ms, Avg time: 11.256 ms   
  2. Burlap ------------->> Total time:   816 ms, Avg time:  0.816 ms   
  3. Hessian ------------>> Total time:   582 ms, Avg time:  0.582 ms   
  4. REST --------------->> Total time:   919 ms, Avg time:  0.919 ms   
  5. AxisUsingWSDL2Java ->> Total time: 11908 ms, Avg time: 11.908 ms  
Axis --------------->> Total time: 11256 ms, Avg time: 11.256 ms
Burlap ------------->> Total time:   816 ms, Avg time:  0.816 ms
Hessian ------------>> Total time:   582 ms, Avg time:  0.582 ms
REST --------------->> Total time:   919 ms, Avg time:  0.919 ms
AxisUsingWSDL2Java ->> Total time: 11908 ms, Avg time: 11.908 ms


循环10,000次的测试
第一次

Java代码 复制代码
  1. Axis --------------->> Total time:  88013 ms, Avg time:  8.8013 ms   
  2. Burlap ------------->> Total time:   5789 ms, Avg time:  0.5789 ms   
  3. Hessian ------------>> Total time:   5162 ms, Avg time:  0.5162 ms   
  4. REST --------------->> Total time:   8316 ms, Avg time:  0.8316 ms   
  5. AxisUsingWSDL2Java ->> Total time: 112801 ms, Avg time: 11.2801 ms  
Axis --------------->> Total time:  88013 ms, Avg time:  8.8013 ms
Burlap ------------->> Total time:   5789 ms, Avg time:  0.5789 ms
Hessian ------------>> Total time:   5162 ms, Avg time:  0.5162 ms
REST --------------->> Total time:   8316 ms, Avg time:  0.8316 ms
AxisUsingWSDL2Java ->> Total time: 112801 ms, Avg time: 11.2801 ms


第二次

Java代码 复制代码
  1. Axis --------------->> Total time:  87359 ms, Avg time:  8.7359 ms   
  2. Burlap ------------->> Total time:   5784 ms, Avg time:  0.5784 ms   
  3. Hessian ------------>> Total time:   5084 ms, Avg time:  0.5084 ms   
  4. REST --------------->> Total time:   7983 ms, Avg time:  0.7983 ms   
  5. AxisUsingWSDL2Java ->> Total time: 113234 ms, Avg time: 11.3234 ms  
Axis --------------->> Total time:  87359 ms, Avg time:  8.7359 ms
Burlap ------------->> Total time:   5784 ms, Avg time:  0.5784 ms
Hessian ------------>> Total time:   5084 ms, Avg time:  0.5084 ms
REST --------------->> Total time:   7983 ms, Avg time:  0.7983 ms
AxisUsingWSDL2Java ->> Total time: 113234 ms, Avg time: 11.3234 ms


测试结果
Hessian最快,Burlap第二,REST第三,Axis最慢。前3种要比Axis快了10倍或者更多。

上面的测试,服务端用的是Resin-3.0.13,出于好奇,我又用Tomcat-5.5.9测试了一把,结果是Resin确实比Tomcat快些。Tomcat-5.5.9 循环10,000次的测试
分享到:
评论

相关推荐

    Hessian

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

    hessian

    "工具"可能指的是使用Hessian相关的开发工具或框架,例如HessianProxyFactory、HessianServlet等。 至于【压缩包子文件的文件名称列表】中的"hessian_cilent",这可能是Hessian的客户端实现示例代码或者库文件。...

    hessian案例,hessian案例

    Hessian是一种高效的二进制序列化协议,常用于实现轻量级的远程过程调用(RPC)。这个案例涉及到了Hessian在Java和Python之间的跨语言通信。以下是对Hessian技术及其应用的详细解释: 1. **Hessian简介**:Hessian...

    Hessian多个版本打包下载

    这个压缩包包含了Hessian的多个版本,分别是Hessian3.1.6、Hessian3.2.1以及Hessian4.0.7。每个版本都有其特定的功能改进和优化,了解这些版本的区别和适用场景对于开发者来说至关重要。 Hessian3.1.6是Hessian的一...

    多尺度hessian滤波器图像增强

    在图像处理领域,多尺度Hessian滤波器是一种高级的图像增强技术,它主要用于检测图像中的线性结构,特别是对于微弱或者噪声较大...通过MATLAB提供的相关函数,我们可以方便地实现这一算法,进行有效的图像分析和处理。

    Hessian应用

    《Hessian应用详解》 Hessian,一种轻量级的二进制协议,因其高效、简单的特点,在分布式服务中被广泛应用。它允许开发者在HTTP上透明地调用远程方法,就像是本地方法调用一样,极大地提高了开发效率和系统性能。...

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

    在IT领域,尤其是在医学图像分析中,Hessian矩阵是一个重要的数学工具,用于图像特征检测,特别是在血管分割的应用中。本文将深入探讨标题和描述中提到的"基于Hessian矩阵增强的心血管分割"这一主题。 Hessian矩阵...

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

    - 在实际开发中,我们可能会需要编写一些辅助工具类来处理Hessian的相关操作,例如Hessian2Input和Hessian2Output,它们用于读写Hessian序列化的二进制流。 6. **安全性与优化**: - 虽然Hessian协议效率高,但其...

    Hessian与Spring整合需要jar包

    1. **Hessian库**:这是实现Hessian RPC的基础,包含了序列化和反序列化的类以及远程调用的相关接口。主要的jar包有`hessian.jar`,它提供了Hessian协议的实现。 2. **Spring库**:Spring的核心库,如`spring-...

    hessianServer

    下面将详细介绍Hessian服务端的相关知识点。 1. **Hessian协议**: Hessian是Adobe公司开发的一种高效的二进制Web服务协议。它将数据序列化为紧凑的字节流,比XML更加节省带宽和CPU资源,提高了网络通信的效率。...

    Hessian异步请求访问包

    - Hessian相关的库文件,如HessianAndroidClient.jar,这是Android客户端与Hessian服务器通信的必要库。 - 示例代码,展示如何创建HessianProxy,发起异步请求,并处理回调结果。 - 可能还包含了自定义的异步请求...

    springMVC hessian

    SpringMVC 和 Hessian 是两种在 Java 开发中常见的技术,它们在构建分布式系统时扮演着重要角色。SpringMVC 是 Spring 框架的一部分,主要用于构建 Web 应用的 MVC(模型-视图-控制器)架构。而 Hessian 是一种轻量...

    Hessian的Spring配置

    在Spring框架中,Hessian是一种轻量级的远程方法调用(RPC)协议,它能够实现Java对象到字节流的序列化,从而使得服务端的对象可以在客户端直接调用,仿佛对象就在本地一样。Hessian提供了高效的二进制RPC协议,使得...

    Hessian 使用小结

    Hessian的设计目标是为了提供高效、简单的远程调用方式,使得客户端能够像调用本地方法一样调用远程服务。 **独立使用Hessian** 在不依赖任何框架的情况下,使用Hessian的步骤如下: 1. **添加依赖**:首先,...

    hessian服务端 客户端 可运行

    在这个“hessian服务端 客户端 可运行”的压缩包文件中,很可能包含了一个完整的示例,让我们来详细探讨Hessian在服务端和客户端的实现及其重要性。 首先,我们来理解一下Hessian服务端。在Java中,Hessian服务端...

    Hessian学习简单demo

    Hessian是一种二进制协议,它被设计用于提高远程调用的效率,特别是在Java和C++之间进行跨语言通信时。Hessian的目标是提供一种快速、简洁的数据序列化和远程方法调用(RPC)机制。在这个简单的demo中,我们将探讨...

    Hessian协议格式

    Hessian 协议格式 Hessian 协议是一种轻量级的 remoting on http 工具,使用简单的方法提供了 RMI 的功能。采用的是二进制 RPC 协议,所以它很适合于发送二进制数据。Hessian 主要用作面向对象的消息通信。 ...

    Spring中集成Hessian的问题

    在Spring框架中集成Hessian是为了实现远程方法调用(Remote Method Invocation, RMI),这是一种轻量级的序列化协议,可以高效地传输Java对象。Hessian使得服务提供者和服务消费者之间能够通过网络进行快速的数据...

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

    在实际项目中,结合标签中的“源码”和“工具”,深入研究Hessian的源码和相关工具,可以帮助我们更好地应用这一技术。而“stxm”可能是对某种特定场景或功能的缩写,具体的含义可能需要更多的上下文信息来解读。

    hessian-4.0.63-API文档-中英对照版.zip

    赠送jar包:hessian-4.0.63.jar; 赠送原API文档:hessian-4.0.63-javadoc.jar; 赠送源代码:hessian-4.0.63-sources.jar; 赠送Maven依赖信息文件:hessian-4.0.63.pom; 包含翻译后的API文档:hessian-4.0.63-...

Global site tag (gtag.js) - Google Analytics