知识卡片
ByteToMessageDecoder的累加拆包模板
内容
Netty拆包器都继承同一模板ByteToMessageDecoder:每次channelRead收到新数据先累加进cumulation缓冲区,再交给子类的decode方法切出完整包;数据不够拼成完整包时decode不做任何事,留到下次继续累加;框架比较前后可读字节数是否变化判断decode是否消费了数据,避免死循环。发散:这是模板方法模式,框架负责跨调用状态维护和循环控制,子类只需专注单次判断,是[[粘包半包的TCP字节流本质]]提出的拆包需求的具体实现。
参考来源
《跟闪电侠学Netty:Netty即时聊天实战与底层原理》第24章《解码原理解析》