成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【自己讀源碼】Netty4.X系列(一) 啟動類概覽

qingshanli1988 / 872人閱讀

摘要:一些想法這個系列想開很久了,自己使用也有一段時間了,利用也編寫了一個簡單的框架,并運(yùn)用到工作中了,感覺還不錯,趁著這段時間工作不是很忙,來分析一波源碼,提升下技術(shù)硬實力。

一些想法

這個系列想開很久了,自己使用netty也有一段時間了,利用netty也編寫了一個簡單的框架,并運(yùn)用到工作中了,感覺還不錯,趁著這段時間工作不是很忙,來分析一波源碼,提升下技術(shù)硬實力。

結(jié)構(gòu)

這里先看下netty包的目錄結(jié)構(gòu)

由名字來做個大概的推測吧:

Bootstrap     顧名思義,啟動類的意思
Buffer        應(yīng)該和讀取傳輸數(shù)據(jù)有關(guān)
Channel       負(fù)責(zé)網(wǎng)絡(luò)連接那塊
Handler       這個應(yīng)該是維護(hù)自身邏輯的部分,也是開發(fā)者需要開發(fā)的部分
Resolver      看了下里面的類,猜測是和解析網(wǎng)絡(luò)地址有關(guān)
Util          這個很明了,工具類嘛,不過netty的工具類會很復(fù)雜

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

啟動類

然后再看下netty的tcp標(biāo)準(zhǔn)啟動類寫法,我想大家應(yīng)該都很熟悉了

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() { // (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();
}

按我的理解簡單解釋下吧,就是先配置啟動類,然后綁定并監(jiān)聽端口,最后監(jiān)聽關(guān)閉事件,具體細(xì)節(jié)我們慢慢來看。

配置

先看下配置啟動類,這個就是比較流行的鏈?zhǔn)椒椒?,其實很簡單,return this就行了

我們再來看下channel的配置項

實際上是實現(xiàn)了一個channelFactory接口的工廠類,這個就是經(jīng)典的工廠設(shè)計模式

我們可以有不同的實現(xiàn)方式,netty這里默認(rèn)的是用的反射工廠類,然而當(dāng)我嘗試找其他工廠的實現(xiàn),很遺憾沒有發(fā)現(xiàn)。

泛型

看到這里,我是對這些方法的簽名有些奇怪,為什么要用泛型來實現(xiàn)呢

其實是netty有多個啟動類,我們這個是服務(wù)端啟動類serverBootstrap,還有客戶端的Bootstrap,這兩個都繼承了一個抽象類abstractBootstrap,那兩個類的一些公用的方法,是寫在抽象父類中的,就拿這個配置方法來說,如果直接在父類中return this,那返回的還是父類,會有些方法的損失,所以這里用泛型來實現(xiàn)類,可以直接在父類中轉(zhuǎn)為子類再return

最后看下這個抽象類的簽名吧,我覺得可以學(xué)習(xí)學(xué)習(xí),還是挺優(yōu)雅的

Next

這次就看到這里,下一節(jié)我們看一下啟動類里的成員的類型和它們的大概的作用,然后動手實現(xiàn)我們自己的一個簡單的啟動類。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70514.html

相關(guān)文章

  • 自己源碼Netty4.X系列(二) 啟動成員Channel

    摘要:下面無恥的貼點源碼。啟動類我們也學(xué),把啟動類抽象成兩層,方便以后寫客戶端。別著急,我們慢慢來,下一篇我們會了解以及他的成員,然后,完善我們的程序,增加其接收數(shù)據(jù)的能力。文章的源碼我會同步更新到我的上,歡迎大家,哈哈。 廢話兩句 這次更新拖了很長時間,第一是自己生病了,第二是因為最開始這篇想寫的很大,然后構(gòu)思了很久,發(fā)現(xiàn)不太合適把很多東西寫在一起,所以做了點拆分,準(zhǔn)備國慶前完成這篇博客。...

    waterc 評論0 收藏0
  • 自己源碼Netty4.X系列(三) Channel Register

    摘要:我想這很好的解釋了中,僅僅一個都這么復(fù)雜,在單線程或者說串行的程序中,編程往往是很簡單的,說白了就是調(diào)用,調(diào)用,調(diào)用然后返回。 Netty源碼分析(三) 前提概要 這次停更很久了,原因是中途迷茫了一段時間,不過最近調(diào)整過來了。不過有點要說下,前幾天和業(yè)內(nèi)某個大佬聊天,收獲很多,所以這篇博文和之前也會不太一樣,我們會先從如果是我自己去實現(xiàn)這個功能需要怎么做開始,然后去看netty源碼,與...

    darkbug 評論0 收藏0
  • 自己源碼Netty4.X系列(四) Netty中的異步調(diào)用

    摘要:今天是小明女朋友的生日,小明想給她一個驚喜,于是想到了訂一個蛋糕給她,所以小明打電話給蛋糕店預(yù)定,店員回復(fù)他說好的,我們知道了,制作好了會通知你的。于是小明就開開心心的打游戲去了。值檢查,整個設(shè)計中均沒有對對象做的檢查,容易引起。 Netty中的異步調(diào)用 如果大家觀察仔細(xì),會發(fā)現(xiàn)我們之前所寫的代碼都是串行執(zhí)行的,這是什么意思?就是我們看到代碼是什么順序,最后程序就是按什么順序執(zhí)行的。 ...

    Flands 評論0 收藏0
  • Netty4.x 源碼實戰(zhàn)系列):ServerBootstrap 與 Bootstrap 初探

    摘要:而用于主線程池的屬性都定義在中本篇只是簡單介紹了一下引導(dǎo)類的配置屬性,下一篇我將詳細(xì)介紹服務(wù)端引導(dǎo)類的過程分析。 從Java1.4開始, Java引入了non-blocking IO,簡稱NIO。NIO與傳統(tǒng)socket最大的不同就是引入了Channel和多路復(fù)用selector的概念。傳統(tǒng)的socket是基于stream的,它是單向的,有InputStream表示read和Outpu...

    BakerJ 評論0 收藏0
  • Netty4.x 源碼實戰(zhàn)系列(二):服務(wù)端bind流程詳解

    摘要:對于,目前大家只知道是個線程組,其內(nèi)部到底如何實現(xiàn)的,它的作用到底是什么,大家也都不太清楚,由于篇幅原因,這里不作詳細(xì)介紹,后面會有文章作專門詳解。 在上一篇《ServerBootstrap 與 Bootstrap 初探》中,我們已經(jīng)初步的了解了ServerBootstrap是netty進(jìn)行服務(wù)端開發(fā)的引導(dǎo)類。 且在上一篇的服務(wù)端示例中,我們也看到了,在使用netty進(jìn)行網(wǎng)絡(luò)編程時,我...

    laoLiueizo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<