<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                服務器的引導共用了客戶端引導的一些邏輯。 ### [](https://github.com/waylau/essential-netty-in-action/blob/master/CORE%20FUNCTIONS/Bootstrapping%20servers.md#引導服務器的方法)引導服務器的方法 下表顯示了 ServerBootstrap 的方法 Table 9.2 Methods of ServerBootstrap‘ | 名稱 | 描述 | | --- | --- | | group | 設置 EventLoopGroup 用于 ServerBootstrap。這個 EventLoopGroup 提供 ServerChannel 的 I/O 并且接收 Channel | | channel channelFactory | channel() 指定 Channel 的實現類。如果管道沒有提供一個默認的構造函數,你可以提供一個 ChannelFactory。 | | localAddress | 指定 ServerChannel 實例化的類。如果不提供,將由操作系統創建一個隨機的。或者,您可以使用 bind() 或 connect()指定localAddress | | option | 指定一個 ChannelOption 來用于新創建的 ServerChannel 的 ChannelConfig 。這些選項將被設置在管道的 bind() 或 connect(),這取決于誰首先被調用。在此調用這些方法之后設置或更改 ChannelOption 是無效的。所支持 ChannelOption 取決于使用的管道類型。請參考9.6節和 ChannelConfig 的 API 文檔 的 Channel 類型使用。 | | childOption | 當管道已被接受,指定一個 ChannelOption 應用于 Channel 的 ChannelConfig。 | | attr | 指定 ServerChannel 的屬性。這些屬性可以被 管道的 bind() 設置。當調用 bind() 之后,修改它們不會生效。 | | childAttr | 應用屬性到接收到的管道上。后續調用沒有效果。 | | handler | 設置添加到 ServerChannel 的 ChannelPipeline 中的 ChannelHandler。 具體詳見 childHandler() 描述 | | childHandler | 設置添加到接收到的 Channel 的 ChannelPipeline 中的 ChannelHandler。handler() 和 childHandler()之間的區別是前者是接收和處理ServerChannel,同時 childHandler() 添加處理器用于處理和接收 Channel。后者代表一個套接字綁定到一個遠端。 | | clone | 克隆 ServerBootstrap 用于連接到不同的遠端,通過設置相同的原始 ServerBoostrap。 | | bind | 綁定 ServerChannel 并且返回一個 ChannelFuture,用于 通知連接操作完成了(結果可以是成功或者失敗) | ### [](https://github.com/waylau/essential-netty-in-action/blob/master/CORE%20FUNCTIONS/Bootstrapping%20servers.md#如何引導一個服務器)如何引導一個服務器 ServerBootstrap 中的 childHandler(), childAttr() 和 childOption() 是常用的服務器應用的操作。具體來說,ServerChannel實現負責創建子 Channel,它代表接受連接。因此 引導 ServerChannel 的 ServerBootstrap ,提供這些方法來簡化接收的 Channel 對 ChannelConfig 應用設置的任務。 圖9.3顯示了 ServerChannel 創建 ServerBootstrap 在 bind(),后者管理大量的子 Channel。 [![](https://box.kancloud.cn/2015-08-19_55d477d7edb88.jpg)](https://github.com/waylau/essential-netty-in-action/blob/master/images/Figure%209.3%20ServerBootstrap.jpg) 1. 當調用 bind() 后 ServerBootstrap 將創建一個新的管道,這個管道將會在綁定成功后接收子管道 2. 接收新連接給每個子管道 3. 接收連接的 Channel Figure 9.3 ServerBootstrap 記住 child* 的方法都是操作在子的 Channel,被 ServerChannel 管理。 清單9.4 ServerBootstrap 時會創建一個 NioServerSocketChannel實例 bind() 。這個 NioServerChannel 負責接受新連接和創建NioSocketChannel 實例。 Listing 9.4 Bootstrapping a server ~~~ NioEventLoopGroup group = new NioEventLoopGroup(); ServerBootstrap bootstrap = new ServerBootstrap(); //1 bootstrap.group(group) //2 .channel(NioServerSocketChannel.class) //3 .childHandler(new SimpleChannelInboundHandler<ByteBuf>() { //4 @Override protected void channelRead0(ChannelHandlerContext ctx, ByteBuf byteBuf) throws Exception { System.out.println("Reveived data"); byteBuf.clear(); } } ); ChannelFuture future = bootstrap.bind(new InetSocketAddress(8080)); //5 future.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture channelFuture) throws Exception { if (channelFuture.isSuccess()) { System.out.println("Server bound"); } else { System.err.println("Bound attempt failed"); channelFuture.cause().printStackTrace(); } } } ); ~~~ 1. 創建要給新的 ServerBootstrap 來創建新的 SocketChannel 管道并綁定他們 2. 指定 EventLoopGroup 用于從注冊的 ServerChannel 中獲取EventLoop 和接收到的管道 3. 指定要使用的管道類 4. 設置子處理器用于處理接收的管道的 I/O 和數據 5. 通過配置引導來綁定管道
                  <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>

                              哎呀哎呀视频在线观看