-
请求序号:基于双工协议,提供异步能力,也就是收到的异步消息需要找到前面的通信请求进行响应处理
-
消息长度
-
消息正文
协议定义
====
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;
}
}

本文介绍了如何基于Netty实现自定义消息通信协议,包括协议定义、Header和MessageRecord的结构,以及OpCode枚举。通过MessageRecordEncoder和MessageRecordDecode处理编码和解码过程,并展示了测试协议解析和编码的代码,同时讨论了解决粘包和半包问题的方法,使用LengthFieldBasedFrameDecoder解码器。
最低0.47元/天 解锁文章
1246

被折叠的 条评论
为什么被折叠?



