第十二章 私有协议栈开发
通信协议可以分为公有协议和私有协议,私有协议比较有灵活性,会在公司内部使用,按需定制。
绝大多数私有协议都基于TCP/IP,利用Netty可以非常方便的进行私有协议的定制和开发。
12.1 私有协议介绍
本质是厂商内部发展和采用的标准,除非授权不然其他厂商无权使用。具有封闭性、垄断性、排他性等特点。
12.2 Netty 协议栈功能设计
Netty协议栈用于内部各模块之间的通信,它基于TCP/IP协议栈,是一个类HTTP 协议的应用层协议栈,相比于传统的标准协议栈,它更加轻巧、灵活和实用。
12.2.1 网络拓扑图
Netty节点并没有服务端和客户端的区分,谁先发起连接谁就作为客户端。取决于业务场景
12.2.2 协议栈功能描述
Netty协议栈承载了业务内部各模块之间的消息交互和服务调用,它的主要功能如下
- 基于Netty的NIO通信框架,提供高性能的异步通信能力;
- 提供消息的编解码框架,可以实现POJO的序列化和反序列化;
- 提供基于IP地址的白名单接入认证机制;
- 链路的有效性校验机制;
- 链路的断连重连机制。
12.2.3 通信模型
具体步骤:
- Netty协议栈客户端发送握手请求消息,携带节点ID等有效身份认证信息
- Netty协议栈服务端对握手请求消息进行合法性校验,包括节点ID有效性校验节点重复登录校验和IP地址合法性校验,校验通过后,返回登录成功的握手应答消息
- 链路建立成功之后,客户端发送业务消息
- 链路成功之后,服务端发送心跳消息;
- 链路建立成功之后,客户端发送心跳消息:
- 链路建立成功之后,服务端发送业务消息
- 服务端退出时,服务端关闭连接,客户端感知到对方关闭连接后,被动关闭客户端连接
建立链接后,双方进行全双工通信。心跳采用Ping-Pong机制,链路处于空闲状态时,客户端主动发送消息Ping给服务端,服务端接收消息后回送Pong给客户端,如果连续发送N条消息都没有回应,客户端认为链路挂死或对方处于异常状态,关闭链接并间隔周