【本身讀源碼】Netty4.X系列(一) 啓動類概覽

一些想法

這個系列想開好久了,本身使用netty也有一段時間了,利用netty也編寫了一個簡單的框架,並運用到工做中了,感受還不錯,趁着這段時間工做不是很忙,來分析一波源碼,提高下技術硬實力。設計模式

結構

這裏先看下netty包的目錄結構網絡

clipboard.png

由名字來作個大概的推測吧:框架

Bootstrap     顧名思義,啓動類的意思
Buffer        應該和讀取傳輸數據有關
Channel       負責網絡鏈接那塊
Handler       這個應該是維護自身邏輯的部分,也是開發者須要開發的部分
Resolver      看了下里面的類,猜想是和解析網絡地址有關
Util          這個很明瞭,工具類嘛,不過netty的工具類會很複雜

目錄就像書本的目錄同樣,能幫助咱們理清大概的頭緒。tcp

啓動類

而後再看下netty的tcp標準啓動類寫法,我想你們應該都很熟悉了ide

final EventExecutorGroup group = new DefaultEventExecutorGroup(16);
EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1)
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
    ServerBootstrap b = new ServerBootstrap(); // (2)
    b.group(bossGroup, workerGroup)
            .channel(NioServerSocketChannel.class) // (3)
            .childHandler(new ChannelInitializer<SocketChannel>() { // (4)
                @Override
                public void initChannel(SocketChannel ch) throws Exception {
                    //添加解碼器
                    ch.pipeline().addLast(new xxxxDecoder());
                    //添加編碼器
                    ch.pipeline().addLast(new xxxxEncoder());

                }
            })
            .option(ChannelOption.SO_BACKLOG, 128)          // (5)
            .childOption(ChannelOption.SO_KEEPALIVE, true); // (6)
    ChannelFuture f = b.bind(9999).sync(); // (7)
    f.channel().closeFuture().sync();
} catch (InterruptedException e) {
    e.printStackTrace();
} finally {
    workerGroup.shutdownGracefully();
    bossGroup.shutdownGracefully();
}

按個人理解簡單解釋下吧,就是先配置啓動類,而後綁定並監聽端口,最後監聽關閉事件,具體細節咱們慢慢來看。工具

配置

先看下配置啓動類,這個就是比較流行的鏈式方法,其實很簡單,return this就好了oop

clipboard.png

咱們再來看下channel的配置項學習

clipboard.png

其實是實現了一個channelFactory接口的工廠類,這個就是經典的工廠設計模式this

clipboard.png

咱們能夠有不一樣的實現方式,netty這裏默認的是用的反射工廠類,然而當我嘗試找其餘工廠的實現,很遺憾沒有發現。編碼

泛型

看到這裏,我是對這些方法的簽名有些奇怪,爲何要用泛型來實現呢

clipboard.png

實際上是netty有多個啓動類,咱們這個是服務端啓動類serverBootstrap,還有客戶端的Bootstrap,這兩個都繼承了一個抽象類abstractBootstrap,那兩個類的一些公用的方法,是寫在抽象父類中的,就拿這個配置方法來講,若是直接在父類中return this,那返回的仍是父類,會有些方法的損失,因此這裏用泛型來實現類,能夠直接在父類中轉爲子類再return

clipboard.png

最後看下這個抽象類的簽名吧,我以爲能夠學習學習,仍是挺優雅的

clipboard.png

Next

此次就看到這裏,下一節咱們看一下啓動類裏的成員的類型和它們的大概的做用,而後動手實現咱們本身的一個簡單的啓動類。

相關文章
相關標籤/搜索