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 自定义协议的形式

请求头中包含:

  1. magic 魔数 short类型 2字节
  2. serialType 序列化类型 byte类型 1字节
  3. reqType 消息类型 byte类型 1字节
  4. requestId 请求id long类型 8字节
  5. length 消息体长度 int类型 4字节

消息体content中分为请求类型是request、response的形式内容是不一样的

  1. request请求
    className 类名
    methodName 请求目标方法
    params 请求参数
    parameterTypes 参数类型
  2. 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;


}
相关推荐
Gavin在路上3 分钟前
dubbo源码之一次RPC请求的生死之旅(基于Dubbo 2.7.8)
网络协议·rpc·dubbo
yenggd4 分钟前
华为sr-mpls TE配置案例
网络·华为
yenggd5 分钟前
华为+sr-mpls BE简单配置案例
运维·网络·华为
Sleepy MargulisItG8 分钟前
【Linux网络编程】传输层协议:UDP
linux·服务器·网络·udp
科技块儿11 小时前
如何使用IP数据云提升网络风控、减少业务欺诈
网络·网络协议·tcp/ip
fei_sun11 小时前
【计网】2025年真题
网络
Fnetlink111 小时前
中小企业网络环境优化与安全建设
网络·安全·web安全
爬山算法11 小时前
Netty(10)Netty的粘包和拆包问题是什么?如何解决它们?
服务器·网络·tcp/ip
Sleepy MargulisItG11 小时前
【Linux网络编程】应用层协议:HTTP协议
linux·服务器·网络·http
bruce_哈哈哈11 小时前
车载网络--soa总结--some/ip等认识
网络