這個系列想開好久了,本身使用netty也有一段時間了,利用netty也編寫了一個簡單的框架,並運用到工做中了,感受還不錯,趁着這段時間工做不是很忙,來分析一波源碼,提高下技術硬實力。設計模式
這裏先看下netty包的目錄結構網絡
由名字來作個大概的推測吧:框架
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
咱們再來看下channel的配置項學習
其實是實現了一個channelFactory接口的工廠類,這個就是經典的工廠設計模式this
咱們能夠有不一樣的實現方式,netty這裏默認的是用的反射工廠類,然而當我嘗試找其餘工廠的實現,很遺憾沒有發現。編碼
看到這裏,我是對這些方法的簽名有些奇怪,爲何要用泛型來實現呢
實際上是netty有多個啓動類,咱們這個是服務端啓動類serverBootstrap,還有客戶端的Bootstrap,這兩個都繼承了一個抽象類abstractBootstrap,那兩個類的一些公用的方法,是寫在抽象父類中的,就拿這個配置方法來講,若是直接在父類中return this,那返回的仍是父類,會有些方法的損失,因此這裏用泛型來實現類,能夠直接在父類中轉爲子類再return
最後看下這個抽象類的簽名吧,我以爲能夠學習學習,仍是挺優雅的
此次就看到這裏,下一節咱們看一下啓動類裏的成員的類型和它們的大概的做用,而後動手實現咱們本身的一個簡單的啓動類。