10-netty基础-手写rpc-定义协议头-02

发布于:2025-08-08 ⋅ 阅读:(21) ⋅ 点赞:(0)

 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;


}


 


网站公告

今日签到

点亮在社区的每一天
去签到