Hessian 是由 caucho 提供的一个基于 binary-RPC 实现的远程通讯 library 。
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。同时又具有防火墙穿透能力。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
1 、是基于什么协议实现的?
基于 Binary-RPC 协议实现。
2 、怎么发起请求?
需通过 Hessian 本身提供的 API 来发起请求。
3 、怎么将请求转化为符合协议的格式的?
Hessian 通过其自定义的串行化机制将请求信息进行序列化,产生二进制流。
4 、使用什么传输协议传输?
Hessian 基于 Http 协议进行传输。
5 、响应端基于什么机制来接收请求?
响应端根据 Hessian 提供的 API 来接收请求。
6 、怎么将流还原为传输格式的?
Hessian 根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。
7 、处理完毕后怎么回应? 处理完毕后直接返回, hessian 将结果对象进行序列化,传输至调用端。
客户端发起请求和服务器端接收处理请求都是通过 hessian 自己的 API 。输入输出流都要封装为 hessian 自己的 Hessian2Input 和 Hessian2Output
优点:简单易用,面向接口,通过接口暴露服务,jar包只有200、300k,不需要配置防火墙
效率高,复杂对象序列化速度仅次于RMI,简单对象序列化优于RMI,二进制传输多语言支持:wiki、Java、Flash/Flex、Python、C++、.NET C#、PHP、Ruby、Objective-C
可与spring集成,配置简单,HessianServiceExporte hessian类似于Webservice,但是它不使用soap协议,它把协议报文封装到http封包中,通过HTTP信道传输。是一种高效简洁的远程调用框架,它采用的是二进制RPC协议(Binary),具有轻量、传输量小、平台无关的特点,特别适合于目前网络带宽比较小的手机网络应用项目。Hessian是通过servlet提供远程服务,完全使用动态代理来实现的,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。其中它不需要我们与xml“打交道”,直接操作对象,省去了很多麻烦。
缺点:如果service层中返回的对象是复杂对象,使用它就会削弱Hessian的传输量小的优点,而且也会增加Hessian客户端的代码量。既然它是把对象序列化为二进制流的形式在http信道中传输,缺乏安全机制,传输没有加密处理,那么对于安全性高的应用不应该采用hessian(比如网上支付等)异常机制不完善,总是报一些错误,错误原因也是千奇百怪,提示信息不足
事务处理欠缺
1 hession序列化 与 java 序列化
在远程调用中,需要把参数和返回值通过网络传输,这个使用就要用到序列化将对象转变成字节流,从一端到另一端之后再反序列化回来变成对象。
hessian序列化比Java序列化高效很多,而且生成的字节流也要短很多。但相对来说没有Java序列化可靠,而且也不如Java序列化支持的全面。而之所以会出现这样的区别,则要从它们的实现方式来看。
Java序列化,Java序列化会把要序列化的对象类的元数据和业务数据全部序列化从字节流,而且是把整个继承关系上的东西全部序列化了。它序列化出来的字节流是对那个对象结构到内容的完全描述,包含所有的信息,因此效率较低而且字节流比较大。但是由于确实是序列化了所有内容,所以可以说什么都可以传输,因此也更可用和可靠。
hessian序列化,它的实现机制是着重于数据,附带简单的类型信息的方法。就像Integer a = 1,hessian会序列化成I 1这样的流,I表示int or Integer,1就是数据内容。而对于复杂对象,通过Java的反射机制,hessian把对象所有的属性当成一个Map来序列化,产生类似M className propertyName1 I 1 propertyName S stringValue这样的流,包含了基本的类型描述和数据内容。而在序列化过程中,如果一个对象之前出现过,hessian会直接插入一个R index这样的块来表示一个引用位置,从而省去再次序列化和反序列化的时间。这样做的代价就是hessian需要对不同的类型进行不同的处理(因此hessian直接偷懒不支持short),而且遇到某些特殊对象还要做特殊的处理(比如StackTraceElement)。而且同时因为并没有深入到实现内部去进行序列化,所以在某些场合会发生一定的不一致,比如通过Collections.synchronizedMap得到的map。
2 hession与跨平台
hessian已经支持Java,Flash/Flex,Python,C++,.NET C#,D,Erlang,PHP,Ruby,Objective C,但是,不支持不同语言间的互相调用,你懂的。。原因是不同语言见类型转换的问题,如果要支持的话,那hessian就真的神了。。
貌似可以支持C#客户端调用我们使用JAVA编写的服务。
3 hession的适用场景
内网 分布式项目
手机项目
4 安全机制
hession安全机制比较差,可以采用数据byte[] 加密,如AES。
思路:客户端通过Hessian工厂获取到Hessian服务之后,将传入参数对象序列化成byte[],然后对byte[]进行加密,然后调用hessian服务的方法,服务端获取到客户端传过来的加密之后的byte[]参数,首先进行AES解密,然后将byte[]反序列化成参数对象,再调用相应的业务逻辑,再然后将返回结果进行序列化成byte[],然后进行AES加密,然后客户端获得返回结果之后进行AES解密,然后反序列化成结果对象,至此一轮调用完成
之前公司分布式应用 不同应用间用Hessian 通信,架构接口统一 ,返回参数为String 类型的json。这样避免了一些复杂的对象转化问题,提高了系统稳定性
分享到:
相关推荐
用Spring和Hessian构建分布式应用(远程接口)的方法 本文主要讲解了如何使用Spring和Hessian构建分布式应用中的远程接口。Hessian是一个轻量级的 RPC 框架,基于 HTTP 协议,可以轻松地实现跨语言的远程调用。...
总结,Hessian框架以其高效、简单的特点在分布式开发中占据一席之地。通过`HessianServer`和`HessianClient`,开发者可以快速搭建起服务提供和消费的架构,实现远程调用,简化分布式系统的开发工作。
Hessian的目标是简化分布式系统之间的通信,通过减少网络传输的数据量来提高性能。与其他基于XML的RPC协议(如SOAP)相比,Hessian更简洁、快速,因为它使用了二进制编码,而非文本格式。 **一、Hessian协议基础** ...
Hessian是一种高效的二进制序列化协议,常用于...通过使用Hessian,开发者可以轻松地构建分布式系统,实现服务之间的便捷调用。案例中的文件提供了不同角度的分析和实践指导,帮助我们更好地理解和应用Hessian技术。
在IT行业中,分布式服务框架Dubbo是...通过理解Hessian协议的特性,我们可以实现高效、简洁的远程方法调用,提升分布式系统的性能。在实际项目中,可以根据业务需求和安全考虑,灵活调整和优化Hessian协议的使用方式。
1. **分布式服务调用**:通过Hessian,可以实现跨网络的Java对象调用,如同调用本地对象一样方便,极大地降低了分布式服务的开发复杂度。 2. **Web服务**:Hessian可以作为Web服务的底层通信协议,提供比RESTful或...
总结起来,Hessian是一种高效的二进制Web服务协议,它简化了分布式系统中对象的传输,并提供了跨语言的支持。理解和使用Hessian可以帮助我们构建更快速、更灵活的远程服务调用系统。通过深入研究源码和利用相关工具...
SpringMVC 和 Hessian 是两种在 Java 开发中常见的技术,它们在构建分布式系统时扮演着重要角色。SpringMVC 是 Spring 框架的一部分,主要用于构建 Web 应用的 MVC(模型-视图-控制器)架构。而 Hessian 是一种轻量...
在Spring框架中集成Hessian是为了实现远程方法调用(Remote Method Invocation, RMI),这是一种轻量级的序列化协议,可以高效地传输Java...通过深入学习和实践,我们可以更好地利用Hessian来构建高性能的分布式系统。
Hessian是一种基于二进制协议的服务,它允许Java应用程序通过HTTP进行远程方法调用(RMI)。这个协议设计的目标是提供轻量级、高效的RPC(Remote ...同时,这也展示了Hessian在实现高效、轻量级的分布式系统中的潜力。
HessianServer指的是实现Hessian协议的服务端程序,通常用于构建分布式系统,使得不同的应用可以跨网络进行无缝通信。下面将详细介绍Hessian服务端的相关知识点。 1. **Hessian协议**: Hessian是Adobe公司开发的...
1. 远程服务调用:如分布式系统中的服务间通信。 2. 移动应用通信:移动设备网络环境不稳定,Hessian能有效减少数据传输量。 3. 跨语言通信:Hessian支持多种编程语言,如Java、C++、.NET,实现跨平台的通信。 总结...
Hessian的目标是提供一种快速、简单的方式来进行跨网络的对象方法调用,使得分布式系统开发更为便捷。在这个“Hessian实例”中,我们可以找到Hessian在实际应用中的具体示例和相关库文件。 标题提及的“Hessian实例...
这极大地简化了分布式系统的开发,并且减少了网络开销,因为Hessian的二进制格式通常比基于文本的协议(如XML-RPC或SOAP)更紧凑。 Hessian支持多种类型的数据,包括基本类型、对象、数组、集合和Map,以及Java的...
总的来说,Hessian的jar包是Java开发者实现高效、轻量级RPC通信的重要工具,特别适合在内部网络或已知环境下的分布式系统。通过使用这个jar包,可以快速搭建起服务调用的桥梁,减少网络延迟,提升应用性能。
当我们谈论“Hessian与Spring整合”时,通常是指将Hessian作为服务通信的机制,结合Spring框架来构建分布式服务系统。这种整合有以下几个关键点: 1. **服务提供者(Service Provider)**:首先,我们需要在服务端...
Spring MVC 和 Hessian 整合是企业级应用中常见的技术组合,主要用于构建分布式服务。Spring MVC 是一个基于模型-视图-控制器(MVC)设计模式的轻量级 web 框架,而 Hessian 是一种高效的远程方法调用(RPC)协议,...
3. **跨语言支持**:虽然起源于Java,但Hessian也提供了对其他语言如C++、Python等的支持,便于构建多语言环境下的分布式系统。 4. **透明性**:Hessian允许远程调用像本地方法调用一样,提高了开发者的生产力。 ##...
Hessian是一种二进制Web服务协议,它提供了一种高效的序列化和远程调用机制,常用于分布式系统中。在本项目中,我们探讨的是基于C#实现的Hessian服务端和客户端,已经在IIS环境下进行了测试并成功通过。 1. **...