Hessian学习总结
来源:互联网 发布:街霸2网络对战卡b 编辑:程序博客网 时间:2024/05/22 13:36
一. Hessian简介
Hessian是由caucho提供的一种开源的远程通讯协议。Hessian采用二进制RPC协议,基于HTTP传输,服务器端不用开放防火墙端口。Hessian协议的规范是公开的,可以用于任意语言。
二. Hessian实现
a) 基本实现
服务器端:
定义接口: Hello, World API
publicinterface BasicAPI {
public String hello();
}
接口实现:Hello, World Service
publicclass 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>
客户端:
Stringurl = "http://hessian.caucho.com/hessian/hello.htm";
HessianProxyFactoryfactory = new HessianProxyFactory();
BasicAPIbasic = (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-->
<propertyname="service" ref="hello"/>
<!-- Hessian服务的接口-->
<propertyname="serviceInterface" value="com.xiaonei.jebe.hessian.BasicAPI "/>
</bean>
客户端设置:
客户端定义一个remoting-client.xml文件
<beanid="myServiceClient"class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<propertyname="serviceUrl">
<value>http://hessian.caucho.com/hessian/hello.htm</value>
</property>
<propertyname="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包。
参考文献:
1. 《hessian binary web serviceprotocol》 http://hessian.caucho.com/
2. 《几种通讯协议的比较》 http://javag.javaeye.com/blog/319285
3. 《Spring 2.0宝典》 14.5.1 Hessian介绍
http://book.csdn.net/bookfiles/126/1001264302.shtml
4. 《Hessian 学习笔记》http://www.alisdn.com/wordpress/?p=478
5. 《Hessian学习记录》 http://www.javaeye.com/topic/212028
2009-10-19
- Hessian学习总结
- Hessian学习总结
- Hessian学习总结(一)
- 转载 hessian学习总结
- Hessian学习总结(一)——Hessian入门
- Hessian学习总结(一)——Hessian入门
- Hessian学习总结(二)——使用hessian上传文件
- 【Hessian】hessian学习
- hessian总结
- hessian学习
- hessian学习
- hessian学习
- Hessian学习
- Hessian学习
- Hessian学习
- Hessian学习
- Hessian学习
- hessian学习
- SuperMap Object 基本编程
- Intel CPU的CPUID指令
- 嵌入式Linux的文件系统
- 复制VC中的语法高亮代码
- 一个servlet页面中放两个forwrd
- Hessian学习总结
- Linux下分析Mysql日志的好工具–mysqlsla
- wince6.0 应用程序开发
- VARIANT 小错误引起大问题.
- 程序员的10种级别
- Window API GameMap
- 不能再混日子了
- 常用限制input的方法
- Nand Flash 与Nor Flash 区别