Netty之WebSocket和四種IO介紹

Netty簡介

  1、什麼是netty?

      高性能 事件驅動html

      異步非堵塞 基於NIO的客戶端,服務器端編程框架java

      穩定性和伸縮性   編程

  2、Netty的使用場景

      高性能領域
       多線程併發領域
       異步通訊領域服務器

四種IO介紹

  一、BIO通訊

     (1)一個線程負責鏈接
    (2)一個請求一個應答
    (3)缺少彈性伸縮能力 當客戶端訪問增大,線程形成進程宕機。不能對外服務。 網絡

  二、僞異步IO通訊

     (1)線程池負責鏈接 當有新的客戶端進來,將客戶端的socket封裝成Task投入線程池。
    (2)m請求n應答 將全部的請求放到一個線程池中,由線程池來分配線程;作到異步通訊。
    (3)線程池阻塞 線程池能夠設置最大訪問數。併發不斷增長,可能形成阻塞。多線程

  三、NIO通訊

    (1)緩衝區Buffer ————>>> 他是一個對象,包含讀和寫的數據,全部數據都是用緩衝區處理的。

    (2)通道Channel ————>>> 他就像是一個自來水管同樣,網絡數據經過Channel讀取或寫入,通道與流的不一樣之處在於通道是雙向的,流只是在一個水平線上移動,一個流他必須是inputStrem或outputStrem的子類,通道能夠用於讀寫,或者兩者同時進行。

    (3)多路複用器Selector ————>>> 它會不斷的輪詢註冊在其上的channel,若是channel發生讀或寫事件,那麼這個channel就處於就緒狀態,會被selector輪詢出來,而後經過selectorKey獲取就channel集合,進行後續的io操做。因爲jdk使用epoll()替代傳統的selector實現,因此他並無最大鏈接句柄限制,也就意味着只須要一個負責輪詢selector的線程就能夠接入成千上萬的channel.併發

  四、AIO通訊

     (1)鏈接註冊讀寫事件和回調函數

    (2)讀寫方法異步

    (3)主動通知程序

    總結:AIO異步通道經過兩種方式得到操做結果,第一種就是經過返java.util.concurrent.Futur對象,第二種方式是爲操做提供一個回調參數java.nio.channels.CompletionHandler,這個回調類包含completed,failed兩個方法。那麼AIO的套接字通道是真正的異步非阻塞io,他不須要對註冊的多路複用器進行輪詢操做就能實現異步讀寫,簡化了NIO模型,這就是AIO通訊。框架

Netty的WebSocket通訊實現

  1、Netty實現WebScoket通訊案例

       (1)編寫存儲整個工程的全局配置類 ===》 這裏須要有一個Channel對象來存儲每個接入進來的客戶端 ===》 ChannelGroup對象 ===》爲它賦值的是一個默認的ChannelGroup(DefaultChannelGroup)這裏他須要一個GlobalEventExecutor.INSTANCE參數。

    (2)編寫WebSocket核心類。
這個類繼承了SimpleChannelInboundHandler抽象類,同時這個抽象類又繼承了ChannelHandlerAdapter類,而後重寫ChannelHandlerAdapter類中的channelActive、channelInactive、channelReadComplete、exceptionCaught四個方法和該抽象類的messageReceived方法。在重寫messageReceived方法時編寫須要的業務處理方法和握手請求業務方法就好了。

    (3)編寫初化鏈接時的各個組件
這個類是繼承了ChannelInitializer抽象類。重寫默認的initChannel方法,調用傳入的socketChannel對象通道,將各個組件寫入該對象。異步

 

    

原文出處:https://www.cnblogs.com/zhanvo/p/10905293.htmlsocket

相關文章
相關標籤/搜索