Netty 源码分析03 ServerBootstrap

init初始化方法

1.设置channel选项,调用channelOptions

2.设置channel的属性attr

3.然后从channel中获取pipeline,然后给pipeline增加config中获取的handler

1.增加对应的childHandler

2.设置channel选项options

3.设置属性,调用setAttributes

4.增加监听器,监听完成方法,如果失败了,就直接forceClose,强制关闭channel

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3.3 group

#group(EventLoopGroup group) 方法,设置 EventLoopGroup 到 group

3.4 channel

#channel(Class<? extends C> channelClass) 方法,设置要被实例化的 Channel 的类

3.4.1 ChannelFactory

io.netty.channel.ChannelFactory ,Channel 工厂接口,用于创建 Channel 对象

3.4.2 ReflectiveChannelFactory

io.netty.channel.ReflectiveChannelFactory ,实现 ChannelFactory 接口,反射调用默认构造方法,创建 Channel 对象的工厂实现类。

3.5 localAddress

#localAddress(...) 方法,设置创建 Channel 的本地地址

3.6 option

#option(ChannelOption<T> option, T value) 方法,设置创建 Channel 的可选项

3.7 attr

#attr(AttributeKey<T> key, T value) 方法,设置创建 Channel 的属性

3.8 handler

#handler(ChannelHandler handler) 方法,设置创建 Channel 的处理器

3.9 validate

#validate() 方法,校验配置是否正确

3.11 config

#config() 方法,返回当前 AbstractBootstrap 的配置对象

3.12 setChannelOptions

#setChannelOptions(...) 静态方法,设置传入的 Channel 的多个可选项

3.13 bind

#bind(...) 方法,绑定端口,启动服务端

  1.创建channel对象

  2.初始化channel配置

  3.注册channel到eventLoopGroup

  4.绑定channel的端口,注册channel到SelectionKey

  bind方法核心流程

  

Channel注册到EventLoopGroup,然后绑定channel端口到地址address,把channel注册到SelectionKey

 

 

调用 DefaultChannelPipeline#fireChannelActive() 方法,触发 Channel 激活的事件

用 #safeSetSuccess(ChannelPromise) 方法,回调通知 promise 执行成功。此处的通知,对应回调的是我们添加到 #bind(...) 方法返回的 ChannelFuture 的 ChannelFutureListener 的监听器

在最后几行,我们可以看到,调用 SelectionKey#interestOps(ops) 方法,将我们创建 NioServerSocketChannel 时,设置的 readInterestOp = SelectionKey.OP_ACCEPT 添加为感兴趣的事件。也就说,服务端可以开始处理客户端的连接事件

3.14 initAndRegister

#initAndRegister() 方法,初始化并注册一个 Channel 对象,并返回一个 ChannelFuture 对象

  首先获得 EventLoopGroup 对象,后调用 EventLoopGroup#register(Channel) 方法,注册 Channel 到 EventLoopGroup 中。实际在方法内部,EventLoopGroup 会分配一个 EventLoop 对象,将 Channel 注册到其上

若发生异常,并且 Channel 已经注册成功,则调用 #close() 方法,正常关闭 Channel

创建 Channel 对象

3.14.3 注册 Channel 到 EventLoopGroup

注册channel到eventLoop成功后,会得到selectionKey

4.8 init

#init(Channel channel) 方法,初始化 Channel 配置

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值