Netty源码研究笔记(2)——Bootstrap系列
2022-05-20 19:30
2715 查看
1. Netty源码研究笔记(2)——Bootstrap系列
顾名思义,
Bootstrap是netty提供给使用者的脚手架,类似于Spring的
ApplicationContext,通过
Bootstrap我们使用一些自定义选项,将相关的组件打包起来,从而快速的启动服务器、客户端。
Bootstrap分为:
Bootstrap、
ServerBootstrap两种,其中前者用于构建客户端、后者用于构建服务端。
Bootstrap的实现使用的是典型的建造者模式,使用这种模式的好处是使得构造对象时可读性更好,更不容易出错(相比于使用构造函数而言),并且可以在构造的时候进行校验。
Bootstrap系列还包含相关的
BootstrapConfig。
BootstrapConfig的实现类似外观模式,只暴露其内部持有
Bootstrap的配置信息。(配置信息实际放在
Bootstrap中)。
1.1. 继承关系
1.2. AbstractBootstrap
注意:
bind方法定义在
AbstractBoostrap中。
在使用点对点的传输时,一般在Server端使用
bind,在Client端使用
connect。
如果
bind方法不是通过
ServerBootstrap使用:
- 端到端传输场景下,客户端指定通信端口(非必须)
- 无连接的传输场景,比如:UDP。(必须)
AbstractBootstrap是一个泛型类,它的泛型参数是其实现类,这样便可以使其链式调用方法返回的类型其具体的实现类。
忽略
EMPTY_OPTION_ARRAY、
EMPTY_ATTRIBUTE_ARRAY,这两者用于提供泛型方法的类型入参,从而指示其返回类型,没有实际意义。
我们可以看到在
AbstractBootstrap中需要配置:
- 关联的EventLoopGroup(必选)
- 监听的local socket address:对于端到端的server必选,对于无连接的也必选
- channel handler:必选,一般是channel initializer,负责将需要的channel handler添加到channel pipeline中。
- channel option(可选)
- channel attribute(可选)
- channel factory:一般使用默认的channel factory,它使用反射机制来创建channel
bind、
connect方法在前文已经分析过了,这里我们看未谈到的
validate、
init方法。
validate:
AbstractBootstrap只校验了
EventLoopGroup。
init:
子类中实现。
1.3. ServerBootstrap
在
ServerBootstrap需要配置:
- child channel option:可选,表示和客户端建立的传输信道的配置项。
- child channel attibute:可选,表示和客户端建立的传输信道的属性项。
- child channel handler:必填,一般是channel initializer,表示对客户端请求的处理逻辑
- child event loop group:可选,表示客户端请求处理器的执行线程组。
validate:
校验
child channel handler
init:
ServerBootstrap::init方法给channel pipeline 添加用户指定的channel handler,以及一个
ServerBootstrapAcceptor类型的channel handler,它使得服务端可以和客户端建立端到端的连接。
ServerBootstrapAcceptor以后再谈。
1.4. Bootstrap
validate:
验证channel handler是否存在,即判断对server的response的处理器是否定义了。
init:
给channel pipeline添加用户指定的channel handler。
1.5. AbstractBootstrapConfig、ServerBootstrapConfig、BootstrapConfig
AbstractBootstrapConfig:
ServerBootstrapConfig:
BootstrapConfig:
相关文章推荐
- Netty源码研究笔记(3)——Channel系列
- Netty源码研究笔记(4)——EventLoop系列
- netty源码分析系列——Bootstrap
- Netty源码系列(2)——ServerBootstrap
- Netty源码学习系列之2-ServerBootstrap的初始化
- Netty源码学习系列之4-ServerBootstrap的bind方法
- OpenJDK源码研究笔记(十五):吐槽JDK中的10个富有争议的设计
- OpenJDK源码研究笔记(七)–Java字节码文件(.class)的结构
- jQuery源码研究分析学习笔记-jQuery.deferred()(12)
- Netty源码阅读(一) ServerBootstrap启动
- Android RIL源码研究笔记 の ril (一)
- Android RIL源码研究笔记 の ril (二)
- 学习OpenCV的学习笔记系列(二)源码编译及自带样例工程(转)
- CJSON源码研究笔记
- Bootstrap源码分析系列之初始化和依赖项
- Bootstrap快速学习笔记(1)排版系列之一
- OpenJDK源码研究笔记(九)-可恨却又可亲的的异常(NullPointerException)
- jQuery源码分析研究学习笔记-jQuery.clean()(七)
- netty源码分析系列——概述
- netty之AbstractBootstrap及其子类源码分析