启动Netty服务端必须指定三类属性:线程模型、IO模型、链接读写处理逻辑

50 阅读1分钟

一、最简单的Netty服务端启动

public class NettyServer {
    public static void main(String[] args) {
        //创建了两个NioEventLoopGroup,这两个对象可以看作传统IO编程模型的两大线程组
        //bossGroup表示监听端口,接收新连接的线程组
        NioEventLoopGroup bossGroup = new NioEventLoopGroup();
        //workerGroup表示处理每一个连接的数据读写的线程组
        NioEventLoopGroup workerGroup = new NioEventLoopGroup();
        /*
        用生活中的例子来讲就是,一个工厂要运作,必然要有一个老板负责从外面接活,然后有很多员工,负责具体干活.
        老板就是bossGroup,员工们就是workerGroup,bossGroup接收完连接,交给workerGroup去处理.
        */

        //创建了一个引导类ServerBootstrap,这个类将引导服务端的启动工作.
        ServerBootstrap serverBootstrap = new ServerBootstrap();
        serverBootstrap
                //通过.group(bossGroup,workerGroup)给引导类配置两大线程组,这个引导类的线程模型也就定型了.
                .group(bossGroup,workerGroup)
                //然后指定服务端的IO模型为NIO
                //NioSctpServerChannel.class 这是NIO
                //OioServerSocketChannel.class 这是OIO
                .channel(NioSctpServerChannel.class)
                //调用childHandler()方法,给这个引导类创建一个ChannelInitializer,主要是定义后续每个连接的数据读写
                .childHandler(new ChannelInitializer<NioSocketChannel>() {
                    protected void initChannel(NioSocketChannel ch){
                    }
                });
        //调用bind绑定端口,就可以在本地绑定一个8000端口启动服务端
        serverBootstrap.bind(8000);
    }
}