基于Netty实现自定义消息通信协议(协议设计及解析应用实战)

本文介绍了如何基于Netty实现自定义消息通信协议,包括协议定义、Header和MessageRecord的结构,以及OpCode枚举。通过MessageRecordEncoder和MessageRecordDecode处理编码和解码过程,并展示了测试协议解析和编码的代码,同时讨论了解决粘包和半包问题的方法,使用LengthFieldBasedFrameDecoder解码器。
摘要由CSDN通过智能技术生成
  • 请求序号:基于双工协议,提供异步能力,也就是收到的异步消息需要找到前面的通信请求进行响应处理

  • 消息长度

  • 消息正文

协议定义

====

sessionId | reqType | Content-Length | Content |

其中Version,Content-Length,SessionId就是Header信息,Content就是交互的主体。

定义项目结构以及引入包


io.netty

netty-all

org.slf4j

slf4j-log4j12

org.projectlombok

lombok

项目结构如图4-1所示:

  • netty-message-mic : 表示协议模块。

  • netty-message-server :表示nettyserver。

图片

图4-1

  • 引入log4j.properties

在nettyMessage-mic中,包的结构如下。

图片

定义Header


表示消息头

@Data

public class Header{

private long sessionId; //会话id : 占8个字节

private byte type; //消息类型:占1个字节

private int length; //消息长度 : 占4个字节

}

定义MessageRecord


表示消息体

@Data

public class MessageRecord{

private Header header;

private Object body;

}

OpCode


定义操作类型

public enum OpCode {

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】
BUSI_REQ((byte)0),

BUSI_RESP((byte)1),

PING((byte)3),

PONG((byte)4);

private byte code;

private OpCode(byte code) {

this.code=code;

}

public byte code(){

return this.code;

}

}

定义编解码器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值