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;


}
相关推荐
爱吃苹果的梨叔3 小时前
训练集群网络中断怎么办?智算机房的 Console 串口排障方案
网络·python·智能路由器·php
xiaohaiAIgeo8 小时前
【2026年】医药研发实验室GLP的通风设计要求:稳定性可验证性与合规性
网络·人工智能·科普知识
翼龙云_cloud8 小时前
亚马逊云渠道代理商:VPC 教程 利用 EC2 自建 NAT 实例降低私有子网出网成本
网络·云计算·aws
xiaoye-duck8 小时前
《Linux网络编程》UDP Socket 编程实战:从 Echo 回显、通用字典服务到套接字封装全流程
linux·网络·udp
酒神dnspup8 小时前
CDN 回源检测怎么做?用 DNSPup 验证节点命中、源站暴露与多地可用性
运维·服务器·网络·网络协议·tcp/ip
江南风月9 小时前
3分钟快速上手日志审计系统 WGLOG v2.2 更新了什么
运维·服务器·网络
Dawn-bit10 小时前
Linux网络进阶:TCP三次握手和四次挥手与TCP连接状态
linux·服务器·网络·tcp/ip·云计算·智能路由器
TheBestRucy10 小时前
Python 九阳神功:从零筑基到线程飞升
服务器·开发语言·网络·人工智能·python
酒神dnspup11 小时前
Tcping 端口连通性检测教程:用 DNSPup 判断防火墙、监听与线路故障
网络·网络协议·tcp/ip·ip·dnspup