目录
目标
实现一个RPC中间件,需要选择网络框架,制定协议、序列化方式等,本文简述协议和序列化方式。
protocol协议
what
协议,确定规则,为协议编解码行为提供规范。
规则
- 确定最小单元:bit或byte
- 确定header应占用几个单元
- 确定header中每个单元的含义
- 报文各个字节的含义
协议举例
响应报文
- 协议种类
- 版本
- 表示响应的标示
- 响应状态
- 请求ID
- body的序列化方式标示
- body的长度
- body数据
请求报文
- 协议种类
- 版本
- 表示请求的标示
- body序列化方式标示
- 请求ID
- 超时时间
- 服务名称长度
- 方法名称长度
- 各个参数类型的长度
- 各个参数数据的长度
- 请求配置的长度
- 服务名
- 方法名
- 各个参数类型
- 各个参数数据
- 配置数据
序列化
what
把对象转为二进制序列
关注点
对象包含很多信息,例如类名/域名/域类型/方法信息。需要选择表示对象的最小信息集合。
序列化Bean时只需要标明对象类型名,且只关注对象持有的数据即可,如getter方法和返回数据。
最终类型
所有对象最终均是由基本类型/String/Date/Null/Byte[]构成。
所以对象的序列化最终就是基本类型/String/Date/Null/Byte[]的序列化。
序列化器
what
将对象分类,每个分类对应一个序列化策略,以规定序列化规则。序列化策略即为序列化器。
各种序列化器
基本类型序列化器
对象类型序列化器
javaSerializer作为序列化入口,其保持序列化器集合,具体序列化接口中会选择合适的序列化器进行工作。