27、Netty源码分析:ChannelPipeline.add

本文深入分析了Netty中DefaultChannelPipeline的addLast方法源码,详细解读了filterName、newContext、addLast0等核心步骤,以及handlerAdded方法的异步调用机制,帮助开发者透彻理解Netty管道处理器添加的内部工作原理。

当向pipeline中添加handler时可以从头部添加addFirst,可以添加到某个handler的前面addBefore,可以添加到指定handler的后面addAfter,当然也可以添加到链表的末尾addLast,本文分析addLast,源码过程如下:

 

接下来逐一分析过程中的方法。

filterName

该方法主要是防止向pipeline中添加相同name的handler。

 

newContext

将handler包装成handlerContext

 

addLast0

将handlerContext添加到pipeline链表的末尾

 

callHandlerCallbackLater

如果channel还没注册则将handler添加到pendingHandlerCallbackHead中,当channel注册成功后可以让这些handler调用handlerAdded方法,也就是异步完成handler添加成功事件。

 

callHandlerAddedInEventLoop

如果当前线程不是在eventloop中执行则异步调用callHandlerAdded0方法
 

callHandlerAdded0

调用handler的handlerAdded方法。
 

至此,DefaultChannelPipeline的addLast方法至此分析完毕。当向pipeline中添加handler时先将handler包装成context再添加,添加成功后会调用handler的handlerAdded方法,如果此时channel还没注册则等注册成功后再调用,如果不是在eventloop线程中执行则向eventloop中添加任务异步执行。

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: