此文参考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节点并没用服务端和客户端之分,谁先发起请求,谁就是客户端,另一方就是服务端。
image.png2.2. Netty自定义功能协议栈
基于Netty的NIO通信框架,提供高性能的异步通信能力
提供消息的编解码能力,可以实现消息实体的序列化和反序列化
提供基于IP的白名单接入认证能力
链路的有效性校验机制
链路的断连重连机制
2.3 通信交互图
image.pngNetty节点之间的通信过程如下:
Netty客户端发送握手请求消息,并携带节点ID等有效身份认证信息
Netty服务端对握手请求信息进行合法性校验,包括节点ID有消息,重复登录校验,IP地址合法性校验等,校验通过后,发送握手成功响应消息。
链路建立成功后,客户端发送业务消息
链路建立成功后,服务端发送心跳消息
链路建立成功后,客户端发送心跳消息
链路建立成功后,服务端发送业务消息
服务端退出,关闭连接,客户端一段时间连接不上,也自动断开连接
2.4消息定义
Netty协议栈消息包括两部分:消息头和消息体,具体定义参见权威指南中相应章节
2.5其他功能设计包括:
netty协议支持的字段类型,编解码规范,链路的建立,链路的关闭,可靠性设计,安全性设计,可扩展性设计等
3.Netty协议栈开发步骤:
数据结构定义
消息编解码
握手和安全认证
心跳检测机制
断连重连
具体代码参见github
网友评论