什么是私有协议
没有标准定义,只要能够用于跨进程、跨主机数据交换的非标准协议,都可以称为私有协议。
(HTTP+XML、RESTful+JSON是标准的公有协议)
Netty协议栈的功能
1)基于Netty的NIO通信框架,提供高性能的异步通信能力
2)提供消息的编解码框架,可以实现POJO的序列化和反序列化
3)提供基于IP地址的白名单接入认证机制
4)链路的有效性校验机制
5)链路的断连重连机制
私有协议栈的开发
私有协议开发主要考虑的几点如下:
1)兼容性
2)灵活性
3)可扩展性
4)安全性
协议一般包含两部分:
消息头:消息头一般包含一些属性信息,一般包含消息长度、CRC校验码等
消息体:对于请求消息,内容为请求的数据;对于响应消息,内容为服务端响应的值
一个完整的协议一定要配合一对Encoder/Decoder工具来完成自定义协议的编码和解码。
示例:一个内部消息系统的私有协议
发送消息时需要按照以上格式将数据序列化成byte数组写入网络,而当收到byte数据时需要反序列化数据成具体的消息对象。
按照以上协议,使用LengthFieldBasedFrameDecoder只需要配置:
lengthFieldOffset = 0
lengthFieldLength = 4
lengthAdjustment = 0
initialBytesToStrip = 0
即可以得到一个包含完整消息数据的ByteBuf对象,之后可以根据自己的协议将ByteBuf的数据构建成对象。