1_netty基礎組件

Netty是一個異步的事件驅(qū)動網(wǎng)絡應用框架枯跑。


1. 核心組件

  • Channels
    Java NIO的一個基礎構造“兹龋可以認為它就是入站或者出站的一個載體敛助。因此,它可以被打開或者關閉屋确,連接或者斷開纳击。
  • Callback
    也就是回調(diào)。這里的回調(diào)也就是一個方法攻臀,提供給其它方法作為一個參數(shù)焕数。Netty在處理時間的時候使用到了callback。當一個callback觸發(fā)時刨啸,相關的事件可以由ChannelHandler接口的實現(xiàn)類處理堡赔。代碼如下:
public class ConnectHandler extends ChannelInboundHandlerAdapter {
  @Override
 public void channelActive(ChannelHandlerContext ctx)
                throws Exception {
      System.out.println(
               "Client " + ctx.channel().remoteAddress() + " connected");
  }
 }
  • Future
    Future提供了另外一種操作完成時通知應用的方式。Jdk提供的future只能允許你手動檢查操作是否完成或者一直阻塞直到操作完成设联。所以Netty提供了自己的實現(xiàn)-ChannelFuture善已,用于異步操作。
    ChannelFuture提供了額外的方法允許我們注冊一個或者多個ChannelFutureListener監(jiān)聽器實例离例。監(jiān)聽器的callback方法operationComplete()在操作完成時會被調(diào)用换团。
    內(nèi)一個Netty的出站I/O操作都會返回一個ChannelFuture;意味著不會被阻塞。也就是勤勉說的宫蛆,Netty完完全全就是一個異步事件驅(qū)動框架艘包。
Channel channel = ...;
//非阻塞
//異步連接
ChannelFuture future = channel.connect(
          new InetSocketAddress("192.168.0.1",25));
Channel channel = ...;
//非阻塞
//異步連接
ChannelFuture future = channel.connect(
        new InetSocketAddress("192.168.0.1",25));
//注冊一個ChannelFutureListener,一旦操作完成就會執(zhí)行operationComplete
future.addListener(new ChannelFutureListener(){
  public void operationComplete(ChannelFuture future){
  //檢查操作狀態(tài)  
  if(future.isSuccess()){
      //如果操作成功耀盗,創(chuàng)建一個ByteBuf來保存數(shù)據(jù)
       ByteBuf buffer = Unpooled.copiedBuffer(
              "Hello",Charset.defaultCharset());
        //異步發(fā)送數(shù)據(jù)
        ChannelFuture wf = future.channel()
                        .writeAndFlush(buffer);
         ....
    }else{
        Throwable cause = future.cause();
        cause.printStackTrace();
    }
  }
})
  • Event 和handler

下圖就是入站和出站的事件在ChannelHandlers中流向


?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末想虎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叛拷,更是在濱河造成了極大的恐慌舌厨,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胡诗,死亡現(xiàn)場離奇詭異邓线,居然都是意外死亡,警方通過查閱死者的電腦和手機煌恢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門骇陈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瑰抵,你說我怎么就攤上這事你雌。” “怎么了二汛?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵婿崭,是天一觀的道長。 經(jīng)常有香客問我肴颊,道長氓栈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任婿着,我火速辦了婚禮授瘦,結果婚禮上,老公的妹妹穿的比我還像新娘竟宋。我一直安慰自己提完,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布丘侠。 她就那樣靜靜地躺著徒欣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜗字。 梳的紋絲不亂的頭發(fā)上打肝,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音挪捕,去河邊找鬼闯睹。 笑死,一個胖子當著我的面吹牛担神,可吹牛的內(nèi)容都是我干的楼吃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼妄讯,長吁一口氣:“原來是場噩夢啊……” “哼孩锡!你這毒婦竟也來了?” 一聲冷哼從身側響起亥贸,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤躬窜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后炕置,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荣挨,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡男韧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了默垄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片此虑。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖口锭,靈堂內(nèi)的尸體忽然破棺而出朦前,到底是詐尸還是另有隱情,我是刑警寧澤鹃操,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布韭寸,位于F島的核電站,受9級特大地震影響荆隘,放射性物質(zhì)發(fā)生泄漏恩伺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一椰拒、第九天 我趴在偏房一處隱蔽的房頂上張望莫其。 院中可真熱鬧,春花似錦耸三、人聲如沸乱陡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憨颠。三九已至,卻和暖如春积锅,著一層夾襖步出監(jiān)牢的瞬間爽彤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工缚陷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留适篙,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓箫爷,卻偏偏與公主長得像嚷节,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子虎锚,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容