3.Netty全局入口Bootstrap

总结
  • Bootstrap 用于客户端,绑定一个 EventLoopGroup;ServerBootstrap 用于服务端,绑定 Boss 和 Worker 两个
  • Boss 只负责接受连接,Worker 负责处理读写,职责分离是 Netty 高性能的关键之一
  • 启动流程:配置线程池 → 注册 Channel 类型 → 配置 Handler 链 → 绑定端口

1. Bootstrap vs ServerBootstrap

两者都继承自 AbstractBootstrap,区别就一个:绑定几个 EventLoopGroup。

netty BootStrap

Bootstrap(客户端) ServerBootstrap(服务端)
用途 连接远端服务器 监听本地端口,接受连接
EventLoopGroup 1 个 2 个(Boss + Worker)

2. Boss 和 Worker 是什么关系?

可以理解成"老板"和"员工":

Boss 不干活,专门揽活;Worker 专门干活,不管揽活。职责分离让两边都能高效运转。

对应到 2.Netty整体架构 里的 Boss EventLoopGroup 和 Worker EventLoopGroup。

3. 服务端启动代码

启动分三步:配置线程池 → 注册 Channel → 绑定端口。

public static void main(String[] args) throws InterruptedException {
    // 1. 配置线程池(主从多线程模型)
    EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {
        ServerBootstrap serverBootstrap = new ServerBootstrap();
        serverBootstrap
            .group(bossGroup, workerGroup)
            // 2. 注册 Channel 类型
            .channel(NioServerSocketChannel.class)
            .childOption(ChannelOption.SO_KEEPALIVE, true)
            // 3. 配置 Handler 链(每个新连接都会执行 initChannel)
            .childHandler(new ChannelInitializer<SocketChannel>() {
                @Override
                protected void initChannel(SocketChannel ch) {
                    ch.pipeline()
                        .addLast("codec",      new HttpServerCodec())          // HTTP 编解码
                        .addLast("compressor", new HttpContentCompressor())    // 响应压缩
                        .addLast("aggregator", new HttpObjectAggregator(65536)) // 消息聚合
                        .addLast("handler",    new HttpServerHandler());        // 业务逻辑
                }
            });

        // 4. 绑定端口,sync() 等待绑定完成
        ChannelFuture channelFuture = serverBootstrap.bind(8080).sync();
        // 阻塞主线程,直到 Channel 关闭
        channelFuture.channel().closeFuture().sync();
    } finally {
        workerGroup.shutdownGracefully();
        bossGroup.shutdownGracefully();
    }
}

几个细节值得注意: