netty channel管理,netty channeloption
目录
服务端引导初始化回顾上一小节initAndRegister()方法初始化(频道)方法前文传送门妮蒂分布式计算机网络服务器启动流程
服务端channel初始化
回顾上一小节initAndRegister()方法
最终通道future init Andre register(){ Channel Channel=null;尝试{ //创建渠道渠道=渠道工厂。新频道();//初始化通道初始化(渠道);} catch (Throwable t) { //忽略非关键代码} ChannelFuture regFuture=config().群组()。注册(渠道);//忽略非关键代码返回regFuture}简单回顾上一小节内容, 我们跟完了创建引导的步骤, 知道了妮蒂的NioServerSocketChannel和爪哇岛开发工具包的通道之间的关系,NioServerSocketChannel和爪哇岛开发工具包的引导是组合关系, 在其父类抽象频道中有爪哇岛开发工具包的引导的一个成员变量, 通过创建网状的的引导为爪哇岛开发工具包的引导赋值
init(Channel)方法
我们继续往下看初始化(频道)方法
因为是服务器引导对象调用的初始化()方法, 所以我们跟到服务器引导类的初始化()方法中:
无效初始化(通道通道)抛出异常{ //获取用户定义的选项(1)最终mapchanneldevelopment?对象选项=options 0();同步(选项){ channel.config().设置选项(选项);} //获取用户定义的属性(2) final MapAttributeKey?对象attrs=attrs 0();synchronized(attrs){ for(EntryAttributeKey?对象e :属性。entry set()){ @ suppress warnings( unchecked )属性键对象key=(属性键对象)e . getkey();频道.属性(键)。set(e . getvalue());} } //获取引导的pip线(3)通道管道p=通道。管道();//工作线程组(4)最终事件循环组currentChildGroup=子组;//用户设置的handler(5)最终通道处理程序currentChildHandler=子处理程序;最终入口通道开发?Object[]currentChildOptions;最终EntryAttributeKey?Object[]currentChildAttrs;//选项转化为进入对象(6)同步(子选项){ currentChildOptions=子选项。条目集().to数组(新选项数组(子选项。size());} //属性转化为进入对象(7)同步的(子属性){ currentChildAttrs=子属性。条目集().to数组(新属性数组(子属性。size());} //添加服务端handler(8)p . add last(new ChannelInitializerChannel(){//初始化通道@覆盖公共void初始化通道(通道ch)引发异常{最终通道管道管道=ch。管道();通道处理程序handler=config。handler();如果(处理程序!=null) { pipeline.addLast(处理程序);} ch.eventLoop().execute(new Runnable(){ @ Override public void run(){ pipeline。add last(new ServerBootstrapAcceptor(currentChildGroup,currentChildHandler,currentChildOptions,currentChildAttrs));} });} });}初看起来代码好长, 其实并不复杂, 这里对每一步进行一个简述:
步骤(1), (2)是获取的用户代码中定义的选项和属性
步骤(3)是获取引导的管道,这个引导就是上一小节我们学习创建的NioServerSocketChannel,我们知道每个引导都有个管道的属性, 是抽象频道的成员变量, 而这里的管道()就是获取其与引导绑定的管道,这个管道线,会在后面的章节中讲到
步骤(4)是获取工人线程组, 我们知道这个工人线程组就是在用户代码中创建的NioEventLoopGroup,后来在服务器引导的群组()方法中赋值为服务器引导的成员变量, 而这里是获取其成员变量, 并赋值到局部变量currentChildGroup中,NioEventLoop相关知识会在后面的章节讲到
步骤(6), (7)是将选项和属性转化成进入对象
步骤(8)是添加服务器处理程序,它是通过绑定到channel的管道调用addLast()方法,然后传入ChannelInitializer类的子类对象来添加的。至于addLast方法是做什么的,ChannelInitializer是做什么的,最后一章会给你详细分析,这里就不用深究了。
在本节中,我们已经了解了通道初始化的过程。目前我们只需要知道大概的步骤,后面几节会详细分析addLast的逻辑。
以上是Netty启动进程服务器通道初始化源代码分析的详细内容。关于Netty启动进程服务器通道初始化的更多信息,请关注风行IT的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。