之前做过一个项目,项目中web应用为了与传感器通讯,定义了一整套通讯协议,这里拿最简单的心跳协议来讲,使用netty自带的LengthFieldBasedFrameDecoder解码器来解决粘包与半包问题。
心跳协议如下:
简单说下这个协议,固定值的包头包尾设定,更多的是为了迎合硬件,如果你去看过一下rpc框架的通信协议,比如dubbo,为了使包字节数更少,不会这样。所以站在高效通讯的角度上讲,这个协议设计并不合理。
回到主题,上面这套协议算是LengthFieldBasedFrameDecoder最复杂的一种应用吧。
先看看LengthFieldBasedFrameDecoder的一个构造函数源码,如下:
public LengthFieldBasedFrameDecoder(
int maxFrameLength,
int lengthFieldOffset, int lengthFieldLength