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防範,然後執行監聽器中的方法。採用的是觀察者模式

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章