@TOPC
技术栈:Java 17 / Kotlin 2.1.10 / Netty 4.1.110.Final / Spring Boot 3.2.10
目录
- 1. 项目背景
- 2. 整体架构
- 3. 自定义二进制协议
- 4. 编解码机制
- 5. Pipeline 责任链模型
- 6. 协议探测与动态切换
- 7. 粘包/拆包处理
- 8. 连接管理
- 9. 心跳机制
- 10. 自动重连策略
- 11. 服务端生命周期自愈
- 12. 消息推送
- 13. 同步请求-响应模式
- 总结
1. 项目背景
ey-netty 是一个基于 Netty 4.x 的轻量级长连接通信框架,封装了 TCP 长连接场景下常见的通信需求。
核心能力一览:
| 能力 | 说明 |
|---|---|
| 长连接管理 | 连接建立后持续保持,支持双向通信 |
| 自定义二进制协议 | 基于 LengthFieldBasedFrameDecoder 的私有帧格式,含魔数校验 |
| 协议自动探测 | 服务端自动识别二进制/文本协议,动态切换 Pipeline Handler |
| 粘包/拆包 | 通过帧头 length 字段精确拆包,最大帧 8MB |
| 心跳保活 | 双向心跳机制,客户端写空闲发送 PING,服务端回复 PONG |
| 自动重连 | 等差延迟重试 + 周期性重试,支持自定义参数 |
| 同步/异步发送 | 支持 requestId 匹配的同步请求-响应模式,以及 fire-and-forget 异步模式 |
| 消息推送 | 服务端支持全量广播、精确推送 |
| 生命周期自愈 | 服务端内置心跳自检,连续异常自动重启 |
2. 整体架构

架构由 netty-server(服务端) 和 netty-client(客户端) 组成,双方通过 TCP 长连接 进行通信,使用自定义二进制协议作为应用层协议。
- 服务端:基于
ServerBootstrap+NioEventLoopGroup监听端口,接受客户端连接并管理 Channel 连接池。 - 客户端:基于
Bootstrap发起连接,支持断线自动重连、同步/异步消息发送。
3. 自定义二进制协议
3.1 协议设计目标
TCP 是流式协议,数据以字节流形式传输,不保证消息边界。ey-netty 定义了一套私有二进制帧格式来解决这个问题,核心设计要点:
- 通过魔数标识帧的开头,便于协议探测和完整性校验。
- 通过 length 字段声明帧体长度,实现精确拆包。
- 通过 requestId 匹配请求与响应,支持同步等待。
- 通过 type 字段区分消息类别(心跳、文本、业务消息)。
3.2 完整帧结构

客户端→服务端完整帧结构:
| 偏移 | 字段 | 大小 | 说明 |
|---|---|---|---|
| 0 | magic_preamble |
4 bytes | 魔数 0x54656D70(“Temp” 的 ASCII),用于协议探测 |
| 4 | length |
4 bytes |



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



