netty的Pipeline里面的执行定制模型顺序问题

在研究Netty处理粘包问题时,发现Pipeline的顺序至关重要。Pipeline并非随意配置,而是一个链表结构,通过`addLast()`、`addFirst()`等方法控制执行顺序,类似拦截器机制。内部由AbstractChannelHandlerContext类维护链表,通过head和tail指针管理。不正确的顺序可能导致错误或功能失效,例如StringDecoder会改变msg类型,影响后续处理。理解并正确设置Pipeline顺序对于避免错误至关重要。
摘要由CSDN通过智能技术生成
最近在看netty的书,在处理粘包问题的时候,我按照上面的代码执行,但是粘包问题还是存在,而且有时候还不只是粘包的问题,还会报错。
后来发现我的Pipeline没有按照他的顺序,我开始的时候以为这个是随便顺便的,后来发现顺序不对还会出问题。
然后自己就往里面挖了一下,不是很深,发现他其实是一个链表的结构,一个接一个的顺序执行(没有看太底层,如果有错,请告知),同时也解决了我一个疑惑,就是为什么Pipeline的添加方法有那么多。addLast(),addFrist()这么多,因为他为了控制不同的位置,就如同拦截器一样(个人理解,可能不正确,但是目前看来应该是的),一层层的往下执行的。
他的最里面有一个AbstractChannelHandlerContext这个类,这个类实现了他的链表结构。
addlast最后执行的的方法是这个语句
private void addLast0(AbstractChannelHandlerContext newCtx) {
        AbstractChannelHandlerContext prev = tail.prev;
        newCtx.prev = prev;
        newCtx.next = tail;
        prev.next = newCtx;
        tail.prev = newCtx;
    }
里面有一个成员变量tail,这个变量是表示尾部的变量。可以通过这个变量找到这个链表的最后一个,有一个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值