Netty中的ChannelPipeline,ChannelHandler和ChannelHandlerContext是非常核心组件。我们分析了Netty部门如何从源代码设计这三个核心组件,并分析了如何创建和协调工作。
管道接口设计:
您可以看到该界面继承了入站,出站,Iteraable接口,表明他可以同时穿越内部链接列表,并看到几种代表性方法,基本上是插入,添加,删除,删除,删除,删除,删除,删除,删除,删除,删除,删除,,替换操作类似于linkedlist。在同一时间,您也可以返回频道(即插座):
阐明:
源代码:
ChannelHandler的作用是处理IO事件或拦截IO事件,然后将其转发到下一个处理程序ChannelHandler。
处理活动时,处理程序将提交到车站并出门。这两个方向的操作都是不同的。因此,Netty定义了两个子接口继承了ChannelHandler:
ChannelHandlerContext UML图:
ChannelHandlerContext.ChannelOutBoundInVoker和ChannelInboundIncoker的源代码部分:
这两个调用者是对的,即入口或淘汰的目的
源代码的ChannelHandlerContext部分:
分为3个步骤以查看创建过程:
在socketchannel中的抽象父类构造函数中
调试,您可以看到代码将在此处执行,然后继续跟踪
阐明:
查看defaultChannelPipeLine创建的addlast方法的方式如下,代码如下
阐明:
当请求进来时,频道私线如何将这些处理程序在内部打电话?首先,当请求进来时,是第一种致电管道的方法。如果是一个入门事件,这些方法以火为开头并指示管道的流动。让后来的处理程序继续处理。
注意:可以看出,这些方法都是所有方法,即入口事件,静态方法的调用也是Inbound的类型头处理程序。使用这些静态方法使用接口调用head的ChannelInboundinVoker方法,然后调用处理程序的真实方法
阐明:
阐明:
Netty学习和源代码分析GitHub地址
从进入到熟练视频教程(B)的Netty
Netty权威指南第二版
原始:https://juejin.cn/post/7101668180350730248