Java-徹底弄懂netty-程式設計師先從簡單例子開啟netty編程-知識鋪

2020-12-20 知識鋪

知識鋪: 致力於打造輕知識點,持續更新每次的知識點較少,閱讀不累。不佔太多時間,不停的來喚醒你記憶深處的知識點。

一、回顧Nio編程

1.1 創建ServerSocketChannel。

1.2 設置非阻塞模式。

1.3 綁定埠,開始監聽TCP連接。

1.4 創建處理I/O線程。

1.5 創建Selector,把ssc註冊到Selector。

1.6 開始接等待客戶端連接 ssc.accept。

1.7 啟動I/O線程,while循環中輪詢channel狀態。

1.8 Selector.select()獲取到Channel,判斷客戶端狀態: 新加入客戶端(加入到監聽隊列)、讀狀態、寫狀態 三種狀態,進行處理相應的業務邏輯。

回顧下簡單服務端Nio代碼:

二、netty簡單服務端編程

2.1 創建服務啟動類 ServerBootstrap

2.2 創建accept線程 ExecutorService accept

2.3 創建處理線程 ExecutorService worker

2.4 設置socket處理工廠類 NioServerSocketChannelFactory

2.5 設置處理管道的工廠類 ChannelPipelineFactory

2.6 創建業務處理類 HelloServerHandler

2.7 業務代碼在 HelloServerHandler內完成

三、Nio和netty對比

1. netty 編寫的socket 邏輯清晰

2. netty 大量運用工廠模式設計,處理業務更靈活

3. netty API 使用簡單

4. netty 預置多種編碼方案,支持主流行網絡協議。

5. netty 通過ChannelHandler擴展,靈活多變。

6. netty 性能高,社區活躍,框架成熟。

相關焦點

  • Netty 實戰:如何實現文件伺服器?
    針對文件伺服器的處理,實現如下:  import java.io.RandomAccessFile;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.SimpleChannelInboundHandler;import io.netty.handler.stream.ChunkedFile
  • Java-徹底弄懂netty-程式設計師很少碰到的Scatter、Gather-知識鋪
    知識鋪: 致力於打造輕知識點,持續更新每次的知識點較少,閱讀不累。不佔太多時間,不停的來喚醒你記憶深處的知識點。 一、Scatter 分散: 從一個channel分發到多個buffer中。
  • Netty堆外內存洩漏排查,這一篇全講清楚了
    下相關接口申請堆外內存,JNI調用等,下面側重介紹Netty堆外內存洩漏問題排查堆外內存釋放底層實現1 java.nio堆外內存釋放Netty堆外內存是基於原生java.nio的DirectByteBuffer對象的基礎上實現的,所以有必要先了解下它的釋放原理java.nio提供的DirectByteBuffer
  • Netty的EventLoop和線程模型
    在代碼中稱為事件循環,即 io.netty.channel.EventLoop 。 在事件循環中執行任務EventLoop 是協同設計的一部分,採用了兩個基本 API:並發和網絡編程。io.netty.util.concurrent 包基於 JDK 的juc包而構建,以提供線程執行器io.netty.channel 包中的類,為了與 Channel 的事件交互,擴展了這些接口/類EventLoop
  • 敖C肝了一個月的Netty知識點
    如果想獲取到該異步操作的返回值,可以通過該異步操作對象的addListener() 方法為該異步操作添加監 NIO 網絡編程框架 Netty 聽器,為其註冊回調:當結果出來後馬上調用執行。 Netty 的異步編程模型都是建立在 Future 與回調概念之上的。
  • Netty 內存模型分析(一)ByteBuf總覽
    本文開始,將主要圍繞netty相關知識展開,力求從宏觀上把握整個內存結構。
  • Netty責任鏈Pipeline詳解
    一起說說Netty責任鏈,責任鏈這塊是netty運行機制的核心,一起來完整的了解下netty的責任鏈。這個頂級接口定義功能很弱,實際使用時會去實現下面兩大子接口:處理入站I/O事件的ChannelInboundHandler、處理出站I/O操作的ChannelOutboundHandler 適配器類 為了方便開發,避免所有handler去實現一遍接口方法,Netty提供了簡單的實現類: ChannelInboundHandlerAdapter
  • Netty 實現原理淺析
    http://www.kafka0102.com/2010/06/netty%E4%BD%BF%E7%94%A8%E5%88%9D%E6%AD%A5/1、總體結構先放上一張漂亮的Netty總體結構圖,下面的內容也主要圍繞該圖上的一些核心功能做分析,但對如Container Integration及Security
  • 華為應用市場總架構師超神之作:用19個案例透解Netty
    前言讀者評價:實際上,本書更像是以 netty 作為參考,闡述了構建一個高性能通信框架的主要考量(當然,也講了 netty 的一些坑);第一,是線程模型,兩方面:Netty 採用了傳統的 reactor 模式,利用 boss event
  • 手把手教你調試Netty創建連接流程源碼
    超時等待輪詢selector.select()/ selectNow()/select(timeoutMillis) 發現 OP_ACCEPT 事件,處理:SocketChannel socketChannel = serverSocketChannel.accept()selectionKey = javaChannel().register(eventLoop().unwrappedSelector
  • 騰訊內部網際網路拿手菜:Netty速成手冊,三天走向實戰!
    前言在java界,netty無疑是開發網絡應用的拿手菜。你不需要太多關注複雜的nio模型和底層網絡的細節,使用其豐富的接口,可以很容易實現複雜的通訊功能。若你需要完整的pdf版,可以轉發+關注,後臺私信【學習】即可免費領取~第一部分:Netty的概念及體系結構1.Netty——異步和事件驅動(Java網絡編程+Netty簡介+Netty的核心組件)
  • netty writeAndFlush源碼分析
    writeAndFlush,顧名思義,就是寫入(發送緩衝區)並且刷新,熟悉netty編碼的同學對這個方法一定不會感到陌生, 這方法既能將數據寫到發送緩存中
  • Java四大名著是什麼?java程式設計師提高技能的經典編程書籍推薦
    java編程的小夥伴有參考。學任何語言,基本的語法知識不能少,首推,Java四大名著( java編程思想+Effective java中文版+Java核心技術卷12),下面來具體介紹以下包含Java四大名著在內的java程式設計師類圖書。
  • GitHub上非常實用的40個開源JAVA項目
    GitHub:http://h5ip.cn/O9752.scribejava/scribejava:一個簡單的 Java 實現的 OAuth/OAuth2 庫。GitHub:http://h5ip.cn/0pNf3.winterbe/java8-tutorial:絕對值得一看的Java8指南、教程。
  • 提升java編程性能優化知識 程式設計師必看這幾點
    對於學習java的學子也是如此,那麼java程式設計師如何提高編程性能呢,有哪些小知識或者技巧呢,怎麼樣才能在編程性能優化方面有所提升呢?  1.儘量在合適的場合使用單例  使用單例可以減輕加載的負擔,縮短加載的時間,提高加載的效率,但並不是所有地方都適用於單例,簡單來說,單例主要適用於以下三個方面:
  • aio-enhance 首發,Java AIO 內核增強類庫
    2.3 優化 AIO 線程模型Java AIO 相較於 NIO 多了一層異步線程模型,極大降低了開發人員的編程難度。但是通信過程中的 accept、connect、read、write 等事件都是復用同一組線程資源,容易造成讀寫回調進入死鎖狀態。
  • JAVA伺服器推送功能設計,消息方法總結|java|伺服器|客戶端|推送...
    結合實際的場景來把netty這個框架運行起來,一起去梳理這個過程,裡面用到了nio和Reactor,nio實現了對應的API,但是它沒有對多線程進行結合,大牛才設計出來reactor這個模式,來實現高性能的nio的編程,經過梳理才到了netty,reactor一定要搞懂。
  • 程式設計師入門選擇哪一門程式語言?一定要從C語言開始嗎?
    學編程先從哪裡開始入手呢,選擇什麼程式語言會好點呢?一直以來,有那麼一部分新手程式設計師會經歷這方面的困惑,選擇一門程式語言確實是一個非常大的課題。程式設計師選擇哪一門程式語言入門?但是畢竟你要面對的現實是,學C語言離做出成品還很遙遠呢~即使C語言是一門非常好的程式語言,但是它對於沒有接觸過編程的新手、或者急於就業的程式設計師來說,未必適合拿來入門。而只有當你編程實踐到了一定的水平,再過頭學習C語言,會讓你對編程的理解更進一步。