Netty入門(三)構成部分


  該節主要講解 Netty 的構成部分。

一、Channel

  它代表一個用於連接到實體如硬件設備、文件、網絡套接字或程序組件,能夠執行一個或多個不同的 I/O 操作的開放連接。可以比作傳入和傳出數據的傳輸工具。

 

二、Callback(回調)

  它就是一個方法,提供給另一種方法作為引用,這樣后者就可以在某個合適的時間調用前者。比如下面的代碼:

 1 public class DiscardServerHandler extends ChannelInboundHandlerAdapter {
 2     
 3     /**
 4      * 收到數據時調用
 5      */
 6     @Override
 7     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
 8         // TODO 數據處理
 9     }
10 }

  當服務器收到消息時,會自動調用 ChannelRead 方法,因此我們可以重寫該方法來實現對收到數據的處理。

 

三、Future

  它提供了另外一種通知應用操作已經完成的方式。每個 Netty 的出站(outbound) I/O 操作都會返回一個 ChannelFuture ,它允許一個或者多個 ChannelFutureListener 實例,回調方法 operationComplete() 會在操作完成時調用,下面為示例代碼:

 1 // 啟動客戶端,客戶端用connect連接
 2 ChannelFuture f = b.connect(host, port).sync();
 3 f.addListener(new ChannelFutureListener() {    
 4     public void operationComplete(ChannelFuture future) throws Exception {    
 5         if(future.isSuccess()) {        // 連接成功
 6             ByteBuf buf = Unpooled.copiedBuffer("hello",             // 寫數據
 7                     Charset.defaultCharset());
 8             ChannelFuture wf = future.channel().writeAndFlush(buf);    // 發送數據
 9         } else {
10             // 打印錯誤
11             Throwable cause = future.cause();
12             cause.printStackTrace();
13         }
14     }
15 });

 

  上面的代碼首先連接到遠程地址,當連接完成時,檢查連接狀態,若成功發送 hello,否則拋出錯誤。

 

四、Event 和 Handler

  沒看懂,以后補。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM