1.Netty编码解码
ChannelPipeline相当一个管道,里面可以放各种容器,包括ChannelOutboundHandler,ChannelInboundHandler方向可以是tail->head,
也可以是head->tail,和过滤器模式一样,一级一级调用符合条件的。
字符串编码器包括:StringEncoder,StringDecoder
对象编码器包括: ObjectEncoder,ObjectDecoder
高效编码器解码器: protobuf
2.Netty粘包拆包
由于tcp是一个基于流的协议,所以二进制数据没有界限,由于tcp作为传输层并不了解业务数据的含义,可能会根据缓冲区的实际情况进行数据包的划分,所以在业务上认为是一个完整的包,可能会被拆分成多个包进行发送,这就是所谓的拆包,,也有可能拆分的时候把剩余部分的包和另外一个包组合成一个新的包,这就是所谓的粘包
解决办法:1.在每个发送的消息上加上一个特殊字符来区分这是一个独立的消息,
DelimiterBasedFrameDecoder,
2.把要发送的消息计算出长度,然后把长度和消息组装成一个新的对象发送到服务器,服务器直接解析对象。
3.Netty心跳检测机制
IdleStateHandler:底层通过读超时判断当前时间和设定的时间是否有连接,如果有的话则进入定时任务继续轮训,如果没有的话那么底层会自定义的处理器,重写userEventTriggered来进行超时,空闲的处理,
4.Netty断线自动重连
1.客户端启动,但是由于网络的原因导致客户端连接失败,可以进行重连
2.客户端启动,但是服务器没有启动,当服务器启动,可以进行重连