1. Netty源码研究笔记(2)——Bootstrap系列

顾名思义,Bootstrap是netty提供给使用者的脚手架,类似于Spring的ApplicationContext,通过Bootstrap我们使用一些自定义选项,将相关的组件打包起来,从而快速的启动服务器、客户端。

Bootstrap分为:BootstrapServerBootstrap两种,其中前者用于构建客户端、后者用于构建服务端。

Bootstrap的实现使用的是典型的建造者模式,使用这种模式的好处是使得构造对象时可读性更好,更不容易出错(相比于使用构造函数而言),并且可以在构造的时候进行校验。

Bootstrap系列还包含相关的BootstrapConfig

BootstrapConfig的实现类似外观模式,只暴露其内部持有Bootstrap的配置信息。(配置信息实际放在Bootstrap中)。

1.1. 继承关系

1.2. AbstractBootstrap

注意:bind方法定义在AbstractBoostrap中。

在使用点对点的传输时,一般在Server端使用bind,在Client端使用connect

如果bind方法不是通过ServerBootstrap使用:

  • 端到端传输场景下,客户端指定通信端口(非必须)
  • 无连接的传输场景,比如:UDP。(必须)

AbstractBootstrap是一个泛型类,它的泛型参数是其实现类,这样便可以使其链式调用方法返回的类型其具体的实现类。

忽略EMPTY_OPTION_ARRAYEMPTY_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

bindconnect方法在前文已经分析过了,这里我们看未谈到的validateinit方法。

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/p/16293534.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程

3636 0元 限免