netty服务端源码分析之bootstrap

netty echo服务端源码分析(一) 分析了bossGroup和workGroup的创建,我们继续看后面的代码

    ServerBootstrap b = new ServerBootstrap();
    b.group(bossGroup, workerGroup)
        // 把ServerBootstrap的channelfactory设置为ReflectiveChannelFactory
        // 当执行channelfactory的newChannel方法时,会创建NioServerSocketChannel实例
     .channel(NioServerSocketChannel.class)
       // 设置server socket的option
     .option(ChannelOption.SO_BACKLOG, 100)
        // 处理server Socket事件的channelhandler,其实就是OP_ACCEPT一种事件
     .handler(new LoggingHandler(LogLevel.INFO))
        // 处理client socket事件的channelhandler
     .childHandler(new ChannelInitializer() {
         @Override
         public void initChannel(SocketChannel ch) throws Exception {
             ChannelPipeline p = ch.pipeline();
             if (sslCtx != null) {
                 p.addLast(sslCtx.newHandler(ch.alloc()));
             }
             //p.addLast(new LoggingHandler(LogLevel.INFO));
             p.addLast(new EchoServerHandler());
         }
     });

这段代码比较简单,创建了一个ServerBootstrap实例,然后设置了它的属性域的值,设置的内容在代码注释中已经做了些简单说明。

ServerBootstrap是一个辅助启动类,作用是保存服务器和客户端的配置,比较重要的有线程池EventLoopGroup、处理网络io的NioServerSocketChannel、处理server channel和client channel事件的channel handler,然后将server channel注册到selector上,创建eventloop线程,监听client连接,从而使整个系统运转起来。

因为ServerBootstrap比较简单,我们把他的属性域和初始化列出来,后面分析流程的时候可以参考

ServerBootstrap的继承体系:

netty服务端源码分析之bootstrap_第1张图片
ServerBootstrap的继承体系.png

ServerBootstrap
保存client channel的配置

childOptions : client channel的socket option
childAttrs :也是client channel的属性,与childOptions不同的是,这些属性与socket 无关,可以理解为netty框架下处理client channel相关的自定义可选配置
config : ServerBootstrapConfig实例
childGroup : client channel事件和业务处理的线程池
childHandler : client channel事件和业务处理的具体实现逻辑

AbstractBootstrap
保存server channel的配置

group :server channel处理的线程池
channelFactory:ReflectiveChannelFactory类实例,用来创建NioServerSocketChannel实例
localAddress:服务端socket address
options :server channel的socket option配置
attrs :server chanel的自定义配置
handler:server chanel服务端事件处理的具体实现逻辑

你可能感兴趣的:(netty服务端源码分析之bootstrap)