首先Hessian的概念是:由 caucho 提供的一个基于 binary-RPC 实现的远程通讯 library。
那么什么是binary-RPC: Binary-RPC 是一种和 RMI 类似的远程调用的协议
来看看Binary-RPC和RMI的区别:
Step | RPC 基于http协议 | RMI | binary-RPC 基于http协议 |
1 | 执行客户端调用语句,传送参数 | 客户调用客户端辅助对象stub上的方法 | 客户端发起请求,按照 Binary -RPC 协议将请求信息进行填充 |
2 | 调用本地系统发送网络消息 | 客户端辅助对象stub打包调用信息(变量,方法名),通过网络发送给服务端辅助对象skeleton | 填充完毕后将标准格式的二进制文件转化为流,通过传输协议进行传输 |
3 | 消息传送到远程主机 | 服务端辅助对象skeleton将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象 | 接收到在接收到流后转换为二进制格式文件,按照 Binary -RPC 协议获取请求的信息并进行处理 |
4 | 服务器得到消息并取得参数 | 调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象skeleton | 处理完毕后将结果按照 Binary -RPC 协议写入二进制格式文件中并返回 |
5 | 根据调用请求以及参数执行远程过程(服务) | 服务端辅助对象将结果打包,发送给客户端辅助对象stub | |
6 | 执行过程完毕,将结果返回服务器句柄 | 客户端辅助对象将返回值解包,返回给调用者 | |
7 | 服务器句柄返回结果,调用远程主机的系统网络服务发送结果 | 客户获得返回值 | |
8 | 消息传回本地主机 | ||
9 | 客户端句柄由本地主机的网络服务接收消息 | ||
10 | 客户端接收到调用语句返回的结果数据 |
Hessian的序列化与反序列化
Hessian中 AbstractSerializerFactory , AbstractHessianOutput , AbstractSerializer , AbstractHessianInput , AbstractDeserializer 是 实现序列化和反序列化的核心结构代码。
SerializerFactory有很多静态 map 用来存放类与序列化和反序列化工具类的映射,在 SerializerFactory 中,实现了抽象类的 getSerializer 方法,根据不同的需要被序列化的类来获得不同的序列化工具,一共有 17 种序列化工具, hessian 为不同的类型的 java 对象实现了不同的序列化工具,默认的序列化工具是 JavaSerializer 。