ServerBootstrap 是个空构造器,但是有默认的成员变量,底层属性用了LinkedHashMap存ChannelOption和AttributeKey
private final Map<ChannelOption<?>,Object> childOptions=newLinkedHashMap<ChannelOption<?>,Object>();
private final Map<AttributeKey<?>,ObjecD>childAttrs=new LinkedHashMap<AttributeKey<?>,Object>();
//config对象,会在后面起很大作用
private final ServerBootstrapConfig config=new ServerBootstrapConfig(this);
private volatile EventLoopGroup childGroup;
private volatile ChannelHandler childHandler;
分析一下 ServerBootstrap 基本使用情况
ServerBootstrap b=new ServerBootstrap();
b.group(bossGroup,workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG,100)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer<SocketChannel>){
@Override
public void initChannel(SocketChannel ch)throws Exception{
ChannelPipeline p=ch.pipeline();
if(sslCtx l=null){
p.addLast(sslCtx.newHandler(ch.alloc());
}
//p.addLast(new LoggingHandler(LogLevel.INFO));
p.addLast(new EchoServerHandler();
}
});
说明:
1)链式调用:group方法,将boss和worker传入,boss 赋值给 parentGroup 属性,worker 赋值给 childGroup
2)channel 方法传入 NioServerSocketChannel class 对象。会根据这个 class 创建 channel 对象。
3)option 方法传入 TCP参数,放在一个LinkedHashMap 中。
4)handler 方法传入一个 handler 中,这个hanlder只专属于 ServerSocketChannel 而不是给SocketChannel 用
5)childHandler 传入一个 hanlder ,这个handler 将 在每个客户端连接的时候调用。供 SocketChannel 使用