目录

  1. 1. 前言
  2. 2. RPC 协议
  3. 3. Hessian 协议
  4. 4. 序列化

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

Hessian反序列化

2025/11/17 Web Java
  |     |   总文章阅读量:

前言

被我忘掉的 Hessian 反序列化 —— C1oudfL0w0 版(

参考:

https://boogipop.com/2023/03/21/%E8%A2%AB%E6%88%91%E5%BF%98%E6%8E%89%E7%9A%84Hessian%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96/

https://blog.potatowo.top/2024/11/12/Java%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E4%B9%8BHessian/

https://zhuanlan.zhihu.com/p/621596752

https://github.com/oldersheep/simple-hessian-rpc


RPC 协议

此事在计算机操作系统中亦有记载

RPC 全称为 Remote Procedure Call(远程过程调用),它允许一个计算机程序在另一台计算机上执行代码

类似于之前的 RMI,都是远程调用服务,它们的不同之处就是 RPC 通过标准的二进制格式来定义请求的信息,这样跨平台和系统更加方便

实现:

  1. 定义接口。客户端和服务端需要共同定义一套接口,描述函数的输入参数和返回值。
  2. 生成代理代码。客户端需要生成一个代理,它可以将函数调用转换成网络消息,并将结果返回给客户端。
  3. 序列化和反序列化。客户端和服务端之间需要将数据序列化成网络字节流,以便进行传输。收到数据后,需要将其反序列化成可读的数据格式。
  4. 网络传输。客户端和服务端之间需要进行网络传输,以便进行数据交换。
  5. 调用远程函数。客户端通过代理调用服务端的函数,服务端执行该函数并返回结果。
  6. 返回结果。服务端将执行结果序列化后发送给客户端,客户端将其反序列化成可读的数据格式。

相应的通信过程:

  • 客户端发起请求,并按照RPC协议格式填充信息
  • 填充完毕后将二进制格式文件转化为流,通过传输协议进行传输
  • 服务端接收到流后,将其转换为二进制格式文件,并按照RPC协议格式获取请求的信息并进行处理
  • 处理完毕后将结果按照RPC协议格式写入二进制格式文件中并返回

Hessian 协议

Hessian 是一个基于 RPC 的高性能二进制远程传输协议,官方对 Java、Python、C++ 等语言都进行了实现,Hessian 一般在Web服务中使用。

在 Java 里它的使用方法很简单,它定义远程对象,并通过二进制的格式进行传输

<dependency>  
    <groupId>com.caucho</groupId>  
    <artifactId>hessian</artifactId>  
    <version>4.0.63</version>  
</dependency>

类似于 RMI 的形式,Hessian 需要服务端和消费端通过接口相关联,服务端实现接口,当然数据在网络传输之后要进行还原就需要序列号

写一个 demo:


序列化