您的位置:首页 > Web前端 > BootStrap

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: