接上篇,我们继续进入AbstractBootstrap类的 initAndRegister() 方法

进入init()方法

设置父级Channel的options,

进入到上节提到的NioServerSocketChannelConfig

其实就是为我们的channel.config()设置全局属性,当然我们也可以设置attr。

继续看,从channel中获取新创建的pipeline,获取我们初始化的childOptions和childAttrs,我们这里都是null,因为我们并未通过引导器ServerBootStrap来设置。

然后调用了pipeline的addLast方法,传入了一个抽象方法的实现类,这个类就是当前的此类,ServerBootstrap, 这里要注意

继续代码跟进去,我们debug看一下

继续跟

进入 newCtx = newContext(group, name, handler);

我们看,这里childExecutor由于传入的事件循环组是null,所以childExecutor(group)的返回时null, 并且 new 了一个 DefaultChannelHandlerContext 。

进入构造方法

将ServerBootstrap 赋给成员变量 handler , isInboud(handler) 和 isOutbound(handler) 是用来判断是入站处理器还是出站处理器

确认一下,看到ServerBootstrap 继承的这类 ChannelInitializer 继承了 入站处理器的适配器, 也就是  isInboud(handler) = true  , isOutbound(handler)  = false

继续进去父类的构造方法 ,赋值成员变量, 这个时候executor 是 null, 也就是说这里还没有指定当前的这个channel 以后由那个线程来处理

总结一下就是创建了一个上下文包裹了这个ServerBootstrap

我们继续往下看:

把刚刚创建的这个上下文 添加到 pipeline的列表中

现在就变成了这样的层级关系 HeadContext -> ServerBootstrap -> TailContext

看到这里大家或许会有一些疑问,为什么把ServerBootstrap添加到链表中?而不是我们最开始的那个LoggingHandler呢?

其实

这里只是添加一个抽象方法的实现类进去,并没有真正调用initChannel的方法,这个要注意,这个在后面channel注册完后会来调用,并且会把我们当前添加的这个ServerBootstrap从链表中移除掉,这个我们后面再说。

同时值得注意的是,这里还初始化了一个ServerBootstrapAcceptor类,没错这个就是acceptor, 用来接收客户端连接并且将新的客户端注册到多路复用器上,便于处理后面的读写操作。

Netty源码分析--初始化Options,添加处理器(四)的更多相关文章

  1. Netty源码分析第2章(NioEventLoop)---->第4节: NioEventLoop线程的启动

    Netty源码分析第二章: NioEventLoop   第四节: NioEventLoop线程的启动 之前的小节我们学习了NioEventLoop的创建以及线程分配器的初始化, 那么NioEvent ...

  2. Netty源码分析第1章(Netty启动流程)---->第3节: 服务端channel初始化

    Netty源码分析第一章:Netty启动流程   第三节:服务端channel初始化 回顾上一小节的initAndRegister()方法: final ChannelFuture initAndRe ...

  3. Netty源码分析第3章(客户端接入流程)---->第1节: 初始化NioSockectChannelConfig

    Netty源码分析第三章: 客户端接入流程 概述: 之前的章节学习了server启动以及eventLoop相关的逻辑, eventLoop轮询到客户端接入事件之后是如何处理的?这一章我们循序渐进, 带 ...

  4. Netty源码分析第4章(pipeline)---->第2节: handler的添加

    Netty源码分析第四章: pipeline 第二节: Handler的添加 添加handler, 我们以用户代码为例进行剖析: .childHandler(new ChannelInitialize ...

  5. Netty源码分析第1章(Netty启动流程)---->第1节: 服务端初始化

    Netty源码分析第一章:  Server启动流程 概述: 本章主要讲解server启动的关键步骤, 读者只需要了解server启动的大概逻辑, 知道关键的步骤在哪个类执行即可, 并不需要了解每一步的 ...

  6. Netty源码分析第2章(NioEventLoop)---->第3节: 初始化线程选择器

    Netty源码分析第二章:NioEventLoop   第三节:初始化线程选择器 回到上一小节的MultithreadEventExecutorGroup类的构造方法: protected Multi ...

  7. Netty源码分析 (三)----- 服务端启动源码分析

    本文接着前两篇文章来讲,主要讲服务端类剩下的部分,我们还是来先看看服务端的代码 /** * Created by chenhao on 2019/9/4. */ public final class ...

  8. Netty源码分析第4章(pipeline)---->第1节: pipeline的创建

    Netty源码分析第四章: pipeline 概述: pipeline, 顾名思义, 就是管道的意思, 在netty中, 事件在pipeline中传输, 用户可以中断事件, 添加自己的事件处理逻辑, ...

  9. Netty源码分析第4章(pipeline)---->第7节: 前章节内容回顾

    Netty源码分析第四章: pipeline 第七节: 前章节内容回顾 我们在第一章和第三章中, 遗留了很多有关事件传输的相关逻辑, 这里带大家一一回顾 首先看两个问题: 1.在客户端接入的时候, N ...

随机推荐

  1. Stompjs websocket vue

    公司项目要求要有消息提醒机制 , 多方面考虑用了ActiveMQ ,基本上现在主流的后台语言都没啥问题 , php phthon java nodejs , 等等都没问题 , 各位道友可以去查阅相关资 ...

  2. 使用Ocelot做网关

    1首先创建一个json的配置文件,文件名随便取,我取Ocelot.json 这个配置文件有两种配置方式,第一种,手动填写 服务所在的ip和端口:第二种,用Consul进行服务发现 第一种如下: { & ...

  3. Swift程式语言(中国版)(8.8 %)

    前言 今天Apple宣布了一项新的编程语言Swift.还提供了一个近400页The Swift Programming Language(Swift程式语言). 虽然我没有开发者账户.不能实际锻炼机S ...

  4. Ubuntu logomaker sh: 1: pngtopnm: not found 解决方案

    暂时未找到logomaker的方法,来解决 命令替换,在文件夹: pngtopnm open_show.png > temp.ppm ppmquant 224 temp.ppm >temp ...

  5. Linux性能测试 命令大全

    Linux 系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工 具来判断究竟是哪一部分(内存.CPU.硬盘……)出了问题.在 Linux 系统中,所有的运行 参数保存在虚拟目录 ...

  6. Qt Installer Framework 3.0.1 Released(功能比较强)

    We are happy to announce the release of Qt IFW 3.0.1. 3.0.1 is fully compatible with 2.0.5, which me ...

  7. WPF 呼吸灯特效

    原文:WPF 呼吸灯特效 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014117094/article/details/46738621 pa ...

  8. 【UVA】11992 - Fast Matrix Operations(段树模板)

    主体段树,要注意,因为有set和add操作,当慵懒的标志下推.递归优先set,后复发add,每次运行set行动add马克清0 WA了好几次是由于计算那一段的时候出问题了,可笑的是我对着模板找了一个多小 ...

  9. 属性更改通知(INotifyPropertyChanged)——针对ObservableCollection

    问题 在开发webform中,wpf中的ObservableCollection<T>,MSDN中说,在添加项,移除项时此集合通知控件,我们知道对一个集合的操作是CURD但是恰恰没有Upd ...

  10. 资源文件加载(Pack URI 方案)

    Pack URI 在 Windows Presentation Foundation (WPF) 中,使用统一资源标识符 (URI) 标识和加载文件的方式有很多,包括:1.指定当应用程序第一次启动时显 ...