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:
作者:
迈吉
出处:
https://www.cnblogs.com/stepfortune/
关于作者:迈吉
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出,
原文链接
如有问题, 可邮件(showable@qq.com)咨询.
来源:https://www.cnblogs.com/stepfortune/p/16293534.html
本站部分图文来源于网络,如有侵权请联系删除。