WebService另一种轻量级实现—Hessian 学习笔记
? 最近和同事聊天,得知他们在使用一种叫做Hessian的WebService实现方式实现远程方法调用,是轻量级的,不依赖JavaEE容器,同时也是二进制数据格式传输,效率比SOAP的XML方式要高。感觉像是RESTFUL方式类似,好奇之下到网上查阅相关资料,总结如下: 一、简介 ???????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)?????????编写服务端代码 写一个接口: ? 编写一个实现: ? 配置WEB-INF.xml?部署到Web容器中: ? ?Ok,服务端代码编写完毕。 ???????? b)?????????编写客户端代码 ? ? ? ?????????执行客户端,即可返回相应的结果: ???????????????????远程调用结果: 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?中的实现代码如下(略过部分代码): ? ? ? 整个执行步骤如下: l??接收输入流,并通过SerializerFactory转化为?Hessian?特有的?Hessian2Input l??设置输出流,并通过SerializerFactory转化为?Hessian?特有的?Hessian2Output l??根据配置的接口和实现参数,调用服务,并把结果写入到输出流?Hessian2Output中 l???Out.close() ? Hessian远程访问基于序列化和反序列化的方式。当程序运行时,程序所创建的各种对象都位于内存中,当程序运行结束,这些对象就结束了生命周期。对象的序列化主要有两种用途: l??把对象的字节序列永久地保存到硬盘上,通常是放在一个文件中。 l??在网络上传输对象的字节序列 ? 四.Hessian的优点:
1- 整个jar很小,200多K,3.1版本的,当然,我下载的for java的版本. 2- 配置很简单,基本上不需要花什么经历就配置出来了 3- 功能强大,可以将soap抛开,也可以把EJB抛开,采用二进制来传递对象 4- 拥有多种语言支持,python?c++? .net 甚至 flex 都可以做为client端 ? 注:Hessian for java的相关资料下载地址:http://hessian.caucho.com/#Java?。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angularjs – 为什么ngIf的优先级高于{{}}(插值)?
- Bootstrap-table使用footerFormatter做统计列功能
- Angular Material 2:多个mat-table排序仅适用于第一个表
- Angular(二)--程序架构
- bash – zsh:如何使标签完成在光标后不需要空格到下一个单
- twitter-bootstrap – 如何让MPDF呈现Bootstrap表样式
- scala – 为什么在理解中这两种模式匹配之间的行为存在差异
- scala – 在Spark SQL中的一个查询中使用多个collect_list
- twitter-bootstrap – Bootstrap模式上的Jquery验证无法正常
- Webservice_15_SOAP异常处理