10-netty基础-手写rpc-定义协议头-02
netty系列文章:
01-netty基础-socket |
02-netty基础-java四种IO模型 |
03-netty基础-多路复用select、poll、epoll |
04-netty基础-Reactor三种模型 |
05-netty基础-ByteBuf数据结构 |
06-netty基础-编码解码 |
07-netty基础-自定义编解码器 |
08-netty基础-自定义序列化和反序列化 |
09-netty基础-手写rpc-原理-01 |
10-netty基础-手写rpc-定义协议头-02 |
11-netty基础-手写rpc-支持多序列化协议-03 |
12-netty基础-手写rpc-编解码-04 |
13-netty基础-手写rpc-消费方生成代理-05 |
14-netty基础-手写rpc-提供方(服务端)-06 |
1 自定义协议的形式
请求头中包含:
- magic 魔数 short类型 2字节
- serialType 序列化类型 byte类型 1字节
- reqType 消息类型 byte类型 1字节
- requestId 请求id long类型 8字节
- length 消息体长度 int类型 4字节
消息体content中分为请求类型是request、response的形式内容是不一样的
- request请求
className 类名
methodName 请求目标方法
params 请求参数
parameterTypes 参数类型 - response响应
msg 响应结果 String类型 比如success fail
data 响应数据 Object类型 比如方法的返回结果
2 具体的代码
netty-protocol core包下
2.1 Header
package com.bonnie.protocol.core;import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;/*** 协议头*/
@Data
@NoArgsConstructor
public class Header implements Serializable {/*** 魔数 2字节*/private short magic;/*** 序列化类型 1个字节*/private byte serialType;/*** 消息类型 1个字节*/private byte reqType;/*** 请求id 8个字节*/private long requestId;/*** 消息体长度,4个字节*/private int length ;}
2.2 RpcProtocol
package com.bonnie.protocol.core;import lombok.Data;import java.io.Serializable;@Data
public class RpcProtocol <T> implements Serializable {/*** 请求头*/private Header header;/*** 请求内容*/private T content;}
2.3 RpcRequest
package com.bonnie.protocol.core;import lombok.Data;import java.io.Serializable;@Data
public class RpcRequest implements Serializable {/*** 类名*/private String className;/*** 请求目标方法*/private String methodName;;/*** 请求参数*/private Object[] params;;/*** 参数类型*/private Class<?>[] parameterTypes;;}
2.4 RpcResponse
package com.bonnie.protocol.core;import lombok.Data;import java.io.Serializable;@Data
public class RpcResponse implements Serializable {private Object data;private String msg;}