Netty-ServerBootstrap
Netty 引导类
Netty 中有两个引导帮助器, Bootstrap 和 ServerBootstrap。其中 Bootstrap 用于引导客户端 Channel 使用, ServerBootstrap 用于引导服务端 Channel 使用。Netty 引导类使得创建客户端和服务只需要遵循模板编写即可。Bootstrap 和 ServerBootstrap 都继承 AbstractBootstrap ,它支持语法糖,是一个抽象类。主要封装了 Bootstrap 和 ServerBootstrap 的共有方法。用于服务器通道的一系列配置,例如:绑定 NioEventLoopGroup 线程组,指定指定NIO的模式,指定子处理器,用于处理 workerGroup, 指定端口等。
ServerBootstrap
ServerBootstrap 用于引导服务端 Channel 使用。
Bootstrap
Bootstrap 用于引导客户端 Channel 使用。
AbstractBootstrap 类
类定义
// 类型定义
public abstract class AbstractBootstrap<B
extends AbstractBootstrap<B, C>, C extends Channel> implements Cloneable
// 实现语法糖
private B self() {
return (B) this;
}
这里用到了泛型定义,B 必须是 AbstractBootStrap 的子类,C 是 Channel 的子类,其中 B 作为泛型,结合 self() 方法实现连续调用。调用 self 函数,当引导类为 ServerBootstrap 那么返回的实例对应的类便是 ServerBootstrap ,如果引导类是 Bootstrap ,那么返回的实例对应的类便是 Bootstrap,非常巧妙的设计。
成员变量
包含的成员变量有以下这些:
volatile EventLoopGroup group;
@SuppressWarnings("deprecation")
private volatile ChannelFactory<? extends C> channelFactory;
private volatile SocketAddress localAddress;
// The order in which ChannelOptions are applied is important they may depend on each other for validation
// purposes.
private final Map<ChannelOption<?>, Object> options = new LinkedHashMap<ChannelOption<?>, Object>();
private final Map<AttributeKey<?>, Object> attrs = new ConcurrentHashMap<AttributeKey<?>, Object>();
private volatile ChannelHandler handler;
ServerBootstrap 类
private final Map<ChannelOption<?>, Object> childOptions = new LinkedHashMap<ChannelOption<?>, Object>();
private final Map<AttributeKey<?>, Object> childAttrs = new ConcurrentHashMap<AttributeKey<?>, Object>();
private final ServerBootstrapConfig config = new ServerBootstrapConfig(this);
private volatile EventLoopGroup childGroup;
private volatile ChannelHandler childHandler;