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;


}
相关推荐
吠品19 小时前
一次 Nginx 报错 unexpected end of file 的排查记录
网络协议·https·ssl
代码中介商19 小时前
TLS握手全解析:从1.2到1.3的加密演进
网络·网络协议·http
xlq2232219 小时前
66.ip
网络·网络协议·tcp/ip
tudoSearcher19 小时前
手机、平板、电脑同时控制Claude Code / Codex ?:Paseo实战指南
网络·开源·开源软件·个人开发·ai编程
加农炮手Jinx19 小时前
Flutter for OpenHarmony:pub_updater 命令行工具自动更新专家(DevOps 运维必备) 深度解析与鸿蒙适配指南
android·运维·网络·flutter·华为·harmonyos·devops
华纳云IDC服务商19 小时前
高防CDN和高防IP一起用,延迟会增加多少?
网络·网络协议·tcp/ip
sxd200120 小时前
Debian #1135514 bug引发的思考
网络·debian·bug
VOOHU-沃虎20 小时前
沃虎——一台旧设备的“慢性病”:网络变压器回波损耗劣化引发的间歇性断流
网络·信息与通信
叶帆20 小时前
【YFIOs】用C#开发硬件之WiFi网络
开发语言·网络·c#
yuegu77720 小时前
HarmonyOS应用<节气通>开发第25篇:HTTP请求封装
网络协议·http·harmonyos