Netty (2)-ChannelInboundHandlerAdapter入站事件

第1篇,我們繼承ChannelInboundHandlerAdapter後,即可收到消息並處理。本篇介紹其更多的用法

基本概念

  • Channel:可以理解爲一個連接,每一個客戶端連到服務器,都會有一個與之對應的Channel。
  • ChannelHandler:用來處理Channel中的各種事件。
  • ChannelInboundHandlerAdapter:入站ChannelHandler,即從客戶端進入服務器的各種事件。
  • ChannelHandlerContext:每個處理事件的方法都有這個參數,可用於執行與當前Channel相關的各種操作。

捕獲ChannelInboundHandlerAdapter事件

public class EchoServerHandler extends ChannelInboundHandlerAdapter{
    public void channelRegistered(ChannelHandlerContext ctx) {
        System.out.println("註冊");
    }
    public void channelActive(ChannelHandlerContext ctx) {
    	System.out.println("激活");
    }
    public void channelInactive(ChannelHandlerContext ctx) {
    	System.out.println("斷開");
    }
    public void channelUnregistered(ChannelHandlerContext ctx) {
    	System.out.println("註銷");
    }
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
    	System.out.println("讀取消息");
    }
    public void channelReadComplete(ChannelHandlerContext ctx)  {
    	System.out.println("消息讀取完成");
    }
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) {
    	System.out.println("用戶事件");
    }
    public void channelWritabilityChanged(ChannelHandlerContext ctx){
    	System.out.println("可寫狀態變更爲"+ctx.channel().isWritable());
    }
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
    	System.out.println("發生異常");
    }

入站事件介紹

  • 註冊和激活:當客戶端連接時,首先會觸發註冊,進行一些初始化的工作,然後激活連接,就可以收發消息了。
  • 斷開和註銷:當客戶端斷開時,反向操作,先斷開,再註銷。
  • 讀取消息:當收到客戶端消息時,首先讀取,然後觸發讀取完成。
  • 發生異常:不多解釋了。
  • 用戶事件:由用戶觸發的各種非常規事件,根據evt的類型來判斷不同的事件類型,從而進行不同的處理。
  • 可寫狀態變更:收到消息後,要回復消息,會先把回覆內容寫到緩衝區。而緩衝區大小是有一定限制的,當達到上限以後,可寫狀態就會變爲否,不能再寫。等緩衝區的內容被沖刷掉後,緩衝區又有了空間,可寫狀態又會變爲是。
發佈了105 篇原創文章 · 獲贊 191 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章