东山明月

V1

2022/04/19阅读:11主题:蓝莹

2-2. 初始化服务端channel

1. channel由创建到初始化

在上一小结完成了channel的创建过程,源码如下:

紧接着便是init(channel),即初始化过程,该过程可分为以下四个步骤:

2. 源码跟进

进入init(),因为是服务端代码,所以我们需要进入ServerBootstrap类,以下根据闪电侠的划分的四个步骤对源码展开说明。

  1. 设置ChannelOptions和ChannelAttrs。首先获取到用户设置的options和attrs,之后将options放到channel.config()中,这里的config用来存放TCP连接的配置信息;获取attrs中的key与value并将其放到channel中。
  1. 设置ChildOptions和ChildAttrs。由源码可以看到将ChildOptions和ChildAttr分别存储到了临时变量currentChildOptions和currentChildAttrs中,这个在之后会用到。
  1. 设置handler,配置服务端pipeline。这里的pipeline是上一小节中创建服务端channel时创建的pipeline,这里是直接获取到;而handler则是在用户程序中设置的,作为ServerBootstrap的一个成员变量,在此处获取到。最后将handler添加到pipeline中。
  1. 添加连接器。netty会添加一个特殊的handler,即ServerBootstrapAcceptor,在配置它的时候会将第二步的临时变量添加进去;还将currentChildHandler添加进去,而currentChildHandler则是在用户代码中的childHandler里配置进去的;此外还配置了currentChildGroup,它对应于用户代码中的b.group()。

小结:保存用户自定义的属性,创建连接接入器,在accept客户端连接时对连接做一些新的配置。

分类:

后端

标签:

Java

作者介绍

东山明月
V1