27、Netty源码分析:ChannelPipeline.add

当向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中添加任务异步执行。

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