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<SocketChannel>() {
@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的继承体系:
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服务端事件处理的具体实现逻辑