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;


}
相关推荐
2401_88842309几秒前
网络编程-TCP的并发服务器构建
服务器·网络·tcp/ip
poemyang4 小时前
从HPACK到多路复用,揭秘HTTP/2如何终结网络拥堵
网络协议·rpc·http2.0
bkspiderx6 小时前
安全扫描:目标主机支持RSA密钥交换问题
网络·nginx·安全·tls·rsa·弱算法
测试专家9 小时前
ARINC 825板卡的应用
大数据·网络·安全
lidashent10 小时前
c语言-内存管理
java·c语言·rpc
wuyang-ligerj11 小时前
路由基础(二):路由表和FIB表
运维·网络·网络协议·智能路由器
nightunderblackcat12 小时前
新手向:网络编程完全指南
网络
weixin_pk13813212 小时前
Libvio网站与客户端访问故障排查指南(专业版)
网络协议
奶油话梅糖12 小时前
深入解析交换机端口安全:Sticky MAC的工作原理与应用实践
网络·安全·macos
wuyang-ligerj13 小时前
OSPF协议(三)
运维·网络·网络协议·智能路由器