写在前面
本文看下bootstrap类。
1:正文
1.1:干啥的?
在进行netty编程的时候都是先创建一个bootstrap,然后设置很多的东西,如下代码(服务端启动代码)
:
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>() {@Overridepublic 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(serverHandler);}});// Start the server.
ChannelFuture f = b.bind(PORT).sync();
最后的启动也是通过它,所以bootstrap是干啥的呢?是一个引导类,负责引导程序启动,类似于导游的作用,带你玩!
1.2:主要的类
类图如下:
顶层的类是AbstractBootstrap,看名字就知道这是个抽象类,如下:
public abstract class AbstractBootstrap<B extends AbstractBootstrap<B, C>, C extends Channel> implements Cloneable {// ...volatile EventLoopGroup group;@SuppressWarnings("deprecation")// serversocketchannel工厂,负责创建serversocketchannelprivate volatile ChannelFactory<? extends C> channelFactory;// 要绑定的地址private volatile SocketAddress localAddress;// ...
}
对应的两个子类ServerBootstrap,Bootstrap分别用于服务端和客户端的启动,如下:
public class Bootstrap extends AbstractBootstrap<Bootstrap, Channel> {
}public class ServerBootstrap extends AbstractBootstrap<ServerBootstrap, ServerChannel> {
}