<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                在所有的例子代碼中,我們在引導過程中通過 handler() 或childHandler() 都只添加了一個 ChannelHandler 實例,對于簡單的程序可能足夠,但是對于復雜的程序則無法滿足需求。例如,某個程序必須支持多個協議,如 HTTP、WebSocket。若在一個 ChannelHandle r中處理這些協議將導致一個龐大而復雜的 ChannelHandler。Netty 通過添加多個 ChannelHandler,從而使每個 ChannelHandler 分工明確,結構清晰。 Netty 的一個優勢是可以在 ChannelPipeline 中堆疊很多ChannelHandler 并且可以最大程度的重用代碼。如何添加多個ChannelHandler 呢?Netty 提供 ChannelInitializer 抽象類用來初始化 ChannelPipeline 中的 ChannelHandler。ChannelInitializer是一個特殊的 ChannelHandler,通道被注冊到 EventLoop 后就會調用ChannelInitializer,并允許將 ChannelHandler 添加到CHannelPipeline;完成初始化通道后,這個特殊的 ChannelHandler 初始化器會從 ChannelPipeline 中自動刪除。 聽起來很復雜,其實很簡單,看下面代碼: Listing 9.6 Bootstrap and using ChannelInitializer ~~~ ServerBootstrap bootstrap = new ServerBootstrap();//1 bootstrap.group(new NioEventLoopGroup(), new NioEventLoopGroup()) //2 .channel(NioServerSocketChannel.class) //3 .childHandler(new ChannelInitializerImpl()); //4 ChannelFuture future = bootstrap.bind(new InetSocketAddress(8080)); //5 future.sync(); final class ChannelInitializerImpl extends ChannelInitializer<Channel> { //6 @Override protected void initChannel(Channel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); //7 pipeline.addLast(new HttpClientCodec()); pipeline.addLast(new HttpObjectAggregator(Integer.MAX_VALUE)); } } ~~~ 1. 創建一個新的 ServerBootstrap 來創建和綁定新的 Channel 2. 指定 EventLoopGroups 從 ServerChannel 和接收到的管道來注冊并獲取 EventLoops 3. 指定 Channel 類來使用 4. 設置處理器用于處理接收到的管道的 I/O 和數據 5. 通過配置的引導來綁定管道 6. ChannelInitializer 負責設置 ChannelPipeline 7. 實現 initChannel() 來添加需要的處理器到 ChannelPipeline。一旦完成了這方法 ChannelInitializer 將會從 ChannelPipeline 刪除自身。 通過 ChannelInitializer, Netty 允許你添加你程序所需的多個 ChannelHandler 到 ChannelPipeline
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看