当前位置: 首页 > news >正文

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;}


 

http://www.dtcms.com/a/320023.html

相关文章:

  • 进程、网络通信方法
  • 机器学习通关秘籍|Day 04:梯度下降的概念原理、手动实现梯度下降
  • 商城小程序怎么做?如何开发母婴用品商城小程序?
  • Redis 编译错误:缺少静态库文件,如何解决?
  • 股指期货合约是个啥?怎么玩?
  • GitCode 7月:小程序积分商城更名成长中心、「探索智能仓颉!Cangjie Magic 体验有奖征文活动」圆满收官、深度对话栏目持续热播
  • 2025年我国半导体材料产业链全景分析
  • 遥感卫星领域的AI应用
  • 经营帮:重构企业经营全流程,打造产业互联网新生态
  • 靶场(二十九)---小白心得靶场体会---BitForge
  • MySQL 极简安装挑战:跨平台高效部署指南
  • C语言 16_day
  • 【Linux基础知识系列】第八十九篇 - 文件内容快速查看:使用cat与tac
  • 容器之王--部署Docker私有仓库harbor母盘步骤演练
  • 使用python基于langchain来写一个ai agent
  • TCP粘包问题详解与解决方案
  • 2025 年华数杯全国大学生数学建模竞赛C 题 可调控生物节律的 LED 光源研究--完整成品、思路、模型、代码、结果分享
  • Maven私服搭建--Nexus-3.82.0 Linux环境
  • 微服务平台需求-部署一体化文档V1.0
  • 计算机网络:固定网络位长度子网划分flsm和可变长子网掩码划分vlsm的区别
  • Liberica JDK 和普通JDK(如Oracle JDK、OpenJDK等)的差异
  • Spring MVC中HttpSession的详解
  • RocketMQ架构解析
  • 工单分类微调训练运维管理工具原型
  • 【FreeRTOS 】任务通知
  • 【原创】Flex和Bison中巧用单双引号提升语法文件的可读性
  • 21点(人机)
  • 学习设计模式《二十一》——装饰模式
  • 深入解析Three.js中的BufferAttribute:源码与实现机制
  • 微信小程序与后台管理系统开发全流程指南