Netty服务器端启动流程

标准的Netty服务端代码格式如下

  ServerBootstrap bootstrap = new ServerBootstrap();
        ///创建2个线程池,boss用于接待新来的请求,worker用于处理请求
        NioEventLoopGroup boss = new NioEventLoopGroup();
        NioEventLoopGroup worker = new NioEventLoopGroup();
        try{
            ////设置线程池
            bootstrap.group(boss, worker);
            ////设置channel工厂,之后会通过反射newChannel拿到这个channel的实例
            bootstrap.channel(NioServerSocketChannel.class);
            bootstrap.childHandler(
                    new DefaultInit()
            );
            ChannelFuture future = bootstrap.bind(8080).sync();
            future.addListener(new GenericFutureListener<Future<? super Void>>() {
                @Override
                public void operationComplete(Future<? super Void> future) throws Exception {
                     System.out.println("----------------------------\n" +
                                        "-----    服务器连接成功    -----\n" +
                                        "------    Hello Netty    -----\n" +
                                        "----------------------------");
                }
            });
        }catch (Exception e) {
                e.printStackTrace();
                boss.shutdownGracefully();
                worker.shutdownGracefully();
        }
        finally {

        }

在这个过程中出现了以下对象:

  • ServerBootstrap 

         这是一个帮助启动的类

  • NioEventLoopGroup

       这是一个线程组的对象,里面存放NioEventLoop(这是一个单线程池),Netty的所有任务都会交给这个线程组里的线程去执行

  • ChannelFuture

       这是一个继承自原生JDK Future的接口,与原生不同的是,他提供一个channel()方法来获取到当前的channel

  •  GenericFutureListener  

       这是一个监听器,当任务完成时,会调用setSuccess防范,然后执行监听器中的方法。采用的是观察者模式

 

发布了40 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41332728/article/details/101067585