ネッティーソース解析(2):サーバーの起動

パッケージcom.xiaofeiyang。

輸入io.netty.bootstrap.ServerBootstrap;
輸入io.netty.channel.ChannelFuture;
輸入io.netty.channel.ChannelInitializer;
輸入io.netty.channel.ChannelOption;
輸入io.netty.channel.EventLoopGroup;
輸入io.netty.channel.nio.NioEventLoopGroup;
輸入io.netty.channel.socket.SocketChannel;
輸入io.netty.channel.socket.nio.NioServerSocketChannel;
輸入io.netty.util.AttributeKey; 

/ ** 
 * @author :陽春
 * @description:
 * @date:2020年4月2日午前12時23分に作成されました
 * /
パブリック 最終 クラスNioServer { 

    公共 静的 ボイドメイン(文字列[]引数)がスロー例外{ 
        EventLoopGroup bossGroup = 新しい NioEventLoopGroup(1 )。
        EventLoopGroup workerGroup = 新しいNioEventLoopGroup(); 

        トライ{ 
            ServerBootstrapのB = 新しいServerBootstrap()。
            b.group(bossGroup、workerGroup)
                    .channel(NioServerSocketChannel。クラス
                    .childOption(ChannelOption.TCP_NODELAY、
                    .childAttr(AttributeKey.newInstance( "childAttr")、 "childAttrValue" // .handler(新ServerHandler()) 
                    .childHandler(新しい ChannelInitializer <のSocketChannel> (){ 
                        @Override 
                        公共 のボイドinitChannel(たSocketChannel CH){
                             // CH .pipeline()addLast(新しいAuthHandler());
                             // ... 

                        } 
                    })。

            ChannelFuture F = b.bind(8888 ).sync(); 

            。f.channel()closeFuture()同期()。
        } 最後に {
            bossGroup.shutdownGracefully()。
            workerGroup.shutdownGracefully(); 
        } 
    } 
}

 

サーバーチャネルを作成します。1.

  練る()

    initAndRegister()

      channelFactory.newChannel()

これのChannelFactory反射によりチャネルを作成します。NioServerSocketChannelでのChannelFactoryを作成するのChannelFactory。

この方法により構成を構築することによりNioServerSocketChannel

newSocket()

NioServerSocketChannelConfig()

AbstractionNioChannel()

  configureBlocking(偽)

  

図2に示すように、初期化チャネル

3、登録セレクタ

図4に示すように、ボンド・ポート

おすすめ

転載: www.cnblogs.com/xiaofeiyang/p/12634545.html
おすすめ