当向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中添加任务异步执行。
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: