# netty-custom-protocol **Repository Path**: TsingFon/netty-custom-protocol ## Basic Information - **Project Name**: netty-custom-protocol - **Description**: netty 自定义协议 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2019-08-23 - **Last Updated**: 2021-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # netty-custom-protocol netty 自定义协议 此文参考Netty权威指南《私有协议栈开发》章节 1.绝大多数的私有协议栈开发都是基于TCP/IP协议,所以Netty的NIO TCP协议栈可以非常方便的进行私有协议栈的定制和开发。 自定义协议主要的步骤: * 定义自己的协议规则(可以参考rocketMQ中的remoting模块的自定义协议) * 自己编写encoder(编码器)和decoder(解码器) * 编写自己的应用服务(netty的client和server) 自定义协议需要注意: * TCP拆包粘包问题(不知道读取内容的长度等):netty中使用LengthFieldBasedFrameDecoder解决 * 服务端卡死问题(一段时间没有接收到对方消息,则释放资源、清除客户端登录缓存等,等待服务器端重连) 2.Netty协议功能设计 2.1 Netty协议网络拓扑图 在分布式环境下,每个netty节点之间建立长连接,使用netty协议进行通信。Netty节点并没用服务端和客户端之分,谁先发起请求,谁就是客户端,另一方就是服务端。 2.2. Netty自定义功能协议栈 * 基于Netty的NIO通信框架,提供高性能的异步通信能力 * 提供消息的编解码能力,可以实现消息实体的序列化和反序列化 * 提供基于IP的白名单接入认证能力 * 链路的有效性校验机制 * 链路的断连重连机制 2.3 通信交互图 Netty节点之间的通信过程如下: 1. Netty客户端发送握手请求消息,并携带节点ID等有效身份认证信息 2. Netty服务端对握手请求信息进行合法性校验,包括节点ID有消息,重复登录校验,IP地址合法性校验等,校验通过后,发送握手成功响应消息。 3. 链路建立成功后,客户端发送业务消息 4. 链路建立成功后,服务端发送心跳消息 5. 链路建立成功后,客户端发送心跳消息 6. 链路建立成功后,服务端发送业务消息 7. 服务端退出,关闭连接,客户端一段时间连接不上,也自动断开连接 2.4消息定义 Netty协议栈消息包括两部分:消息头和消息体,具体定义参见权威指南中相应章节 2.5其他功能设计包括: netty协议支持的字段类型,编解码规范,链路的建立,链路的关闭,可靠性设计,安全性设计,可扩展性设计等 3.Netty协议栈开发步骤: * 数据结构定义 * 消息编解码 * 握手和安全认证 * 心跳检测机制 * 断连重连