Netty3 原始碼分析 - NIO server綁定過程分析

來源:互聯網
上載者:User

標籤:substr   指定   tty   exce   stat   void   strong   bst   res   

Netty3 原始碼分析 - NIO server綁定過程分析
     一個架構封裝的越好,越利於我們高速的coding。可是卻掩蓋了非常多的細節和原理。可是原始碼可以揭示一切。

伺服器端代碼在指定好ChannelFactory。設定好選項。而後Bootstrap.bind操作就會開啟server。接受對端的串連。

所以有必要對這後面的過程分析清楚,是關鍵流程。先是構建一個預設的Pipeline,為我們接下來要建立的監聽通道服務。這個Pipeline裡面會增加一個Binder的上行事件處理器。接下來建立了至關中的NioServerSocketChannel,在構造的過程中,調用了NIO中ServerSocketChannel的open方法開啟通訊端,設為非堵塞,然後會觸發一個OPEN的上行 ChannelStateEvent(為後文買下伏筆),接下來Bootstrap就會等待著成功的訊號。還有一方面,在將Binder這個Handler增加bossPipeline的時候,它就已經準備好運轉了,在收到一個OPEN事件後,就會設定通訊端選項,運行真正的通訊端綁定,而後Future.setSuccess就會讓前面的bind方法成功返回,開始運轉。代碼例如以下:public void channelOpen( ChannelHandlerContext ctx, ChannelStateEvent evt) {
            try {                 // 內部類能夠訪問外部類的方法 。如 getPipelineFactory()。                evt.getChannel().getConfig().setPipelineFactory(getPipelineFactory());
                // Split options into two categories: parent and child.                Map<String, Object> allOptions = getOptions();                Map<String, Object> parentOptions = new HashMap<String, Object>();                for (Entry<String, Object> e: allOptions.entrySet()) {                    if (e.getKey().startsWith( "child.")) {                        childOptions.put( e.getKey().substring(6), e.getValue());                    } else if (!"pipelineFactory" .equals(e.getKey())) {                        parentOptions.put(e.getKey(), e.getValue());                    }                }
                // Apply parent options.                evt.getChannel().getConfig().setOptions(parentOptions);            } finally {                ctx.sendUpstream(evt);            }
            //============ 真正的綁定通訊端 =======            evt.getChannel().bind( localAddress).addListener( new ChannelFutureListener() {                public void operationComplete(ChannelFuture future) throws Exception {                    if (future.isSuccess()) {                      // 這裡觸發了 bind的成功                        bindFuture.setSuccess();                    } else {                        bindFuture.setFailure(future.getCause());                    }                }            });        }






更具體的理解看Netty3 原始碼凝視,見Github。


Netty3 原始碼分析 - NIO server綁定過程分析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.