netty自定义消息体,编码跟解码是相对应的关系,比如编码使用,四个字节的魔数,一字节的版本,一字节的序列化方式,四字节的javabean对象序列化的长度,javabean序列化的内容。
那么解码也是按照自定义的字节数拿到数据,前面10个字节都是固定的,只有javabean序列化的内容是不固定的。
所以解码必然会有黏包半包问题,假设第一次消息有100个字节,javabean对象序列化的长度为120,那么读取数据是不全的,也就是半包。
解决方案,
使用netty官方的handel,new LengthFieldBasedFrameDecoder(),帧解码器。
当缓存的消息主题不够时,不会将消息向下传递,等待完整的数据才向下传递交给解码器解码。
评论 (0)