All Projects → landy8530 → Netty Custom Protocol

landy8530 / Netty Custom Protocol

Licence: mit
netty 自定义协议

Programming Languages

java
68154 projects - #9 most used programming language

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协议栈开发步骤:

* 数据结构定义
* 消息编解码
* 握手和安全认证
* 心跳检测机制
* 断连重连
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].