Netty源碼分析(前言, 概述及目錄)

 

Netty源碼分析(完整版)html

 

前言java

 

        前段時間公司準備改造redis的客戶端, 原生的客戶端是阻塞式連接, 而且連接池初始化的連接數並不高, 高併發場景會有獲取不到鏈接的尷尬, 因此考慮了用netty長鏈接解決鏈接數和阻塞io問題redis

        爲此詳細閱讀了netty源碼, 熟悉了netty的各個主要的特性以及疏通各個組件的關聯關係, 因此想把這段時間的學習內容, 學習經驗毫無保留的分享給你們, 本身提升的同時也幫助你們一塊兒成長編程

        內容中我會把每一個知識點經過每一個章節去進行剖析, 每一個章節也會盡量的將關鍵的流程細化, 但願你們在學習的過程當中能領會到源碼的關鍵步驟, 最好能本身能debug到源碼進行剖析緩存

        此文檔會根據本身對netty的學習深刻, 不斷地更新, 不斷的細化, 不斷的深刻各個模塊的原理多線程

        因爲我的技術能力有限, 不免會有疏漏和錯誤的地方(我的學習過程當中就發現了一些其餘文檔中的錯誤), 發現問題, 也但願各位同窗及時指正(輕噴.....)併發

 

 

下面歸納一些要點:框架

 

1.  學習netty源碼須要什麼知識?高併發

        java基礎就不用說了.....工具

        因爲本文檔只是netty源碼剖析並非netty教程, 因此這裏並不打算講nio和netty怎麼用, 不瞭解的小夥伴能夠首先熟悉下nio編程的基礎, 沒作過實戰項目不要緊, 能寫出helloworld, 並知道每一步是作什麼的, 足矣

        其次要有netty基本使用的能力, 咱們要知道netty完成鏈路以後在哪裏執行咱們自定義的業務邏輯, 收到服務端(或者客戶端)消息以後咱們須要在什麼地方處理, 若是這塊不熟悉, 能夠網上找個demo學習, 或者學習下《netty實戰》, 對此會有一個清晰的認識

        再次咱們熟悉多線程相關的知識, 最好是用過jdk的線程併發庫

        若是以上知識都沒問題, 那就開始愉快的學習吧

 

2.  這個文檔如何學習?

        文章會以章節的形式將每一個模塊的關鍵部分進行剖析, 而且隨着本身研究的不斷深刻進行補充和修改, 文章並不打算對每一個細節進行細緻入微的講解, 而是提煉關鍵代碼, 輔助你們串通整個netty的脈絡, 串通的脈絡以後, 咱們會很容易理解各個模塊在框架中所承擔的責任和義務, 以後若是進行自學就會變得很是容易

        內容會盡可能用簡單通俗的語言進行描述, 而且會附帶我曾經學習某一部分的思考邏輯, 這些思路有可能會和讀者產生共鳴, 從而能駕輕就熟的解決學習當中的困惑

        每個源碼, 我都會經過註釋去講解一些關鍵邏輯, 小夥伴們能夠多關注下注釋

        在源碼剖析過程當中, 同窗們須要本身debug進源碼, 本身去疏通相關的邏輯關係, 只有課後本身動手, 纔會真正掌握其原理, 不然, 是很難消化每一部分的精髓的

        在內容中我也會提示你們, 須要關注的哪些步驟, 初學者只須要將本身的精力放在須要關注的步驟就好. 若是對其餘步驟感興趣也能夠課後進行自行剖析

        因爲文章中會常常跟源碼, 有的方法會跟的比較深, 因此跟蹤方法的步驟會用加粗標誌, 方便讀者找到相應方法

        最好, 是一邊看着文檔另外一邊看着源碼, 防止方法跟蹤太深本身找不到回來的路........

 

3.  這篇文檔學習完以後能達到什麼水平?

        寫這篇文檔的目的就是經過帶同窗們解析源碼的方式串通netty的整改脈絡, 學完以後以後不能保證你能精通netty, 但至少咱們能串通起整個脈絡, 熟悉每個組件, 每個模塊在netty中所承擔的角色, 以及一個消息從發送到接受經歷了什麼步驟, 從而使咱們能更容易的理解到這個框架的精髓, 爲之後的繼續深刻打下堅實的根基......

         固然, 若是你學習的足夠認真, 真正理解了脈絡, 本身寫一個簡單的netty也不是不可能

用我最近的喜歡的雞湯激勵下小夥伴: 種樹最好的時間是十年前, 其次是如今....

 

        最後提醒下讀者, 本文基於Netty的版本是4.1.16.Final

        廢話了這麼多, 正文開始.....

 

 

        目錄:

 

第一章: 服務端啓動流程

        第一節: 服務端初始化

        第二節: NioServerSocketChannel的建立

        第三節: 服務端Channel的初始化

        第四節: 註冊多路複用

        第五節: 綁定端口

 

第二章: NioEventLoop

        第一節: NioEventLoopGroup之建立線程執行器

        第二節: NioEventLoopGroup之NioEventLoop的建立

        第三節: 初始化線程選擇器

        第四節: NioEventLoop線程啓動

        第五節: 優化selector

        第六節: 執行select操做

        第七節: 處理IO事件

        第八節: 執行任務隊列

 

第三章: 客戶端接入流程

        第一節: 初始化NioSocketChannelConfig

        第二節: 處理接入事件之handle的建立

        第三節: NioSocketChannel的建立

        第四節: NioSocketChannel註冊到selector

        第五節: 監聽讀事件

 

第四章: pipeline

        第一節: pipeline的建立

        第二節: handler的添加

        第三節: handler的刪除

        第四節: 傳播inbound事件

        第五節: 傳播outbound事件

        第六節: 傳播異常事件

        第七節: 前章節內容回顧

 

第五章: ByteBuf

        第一節: AbstractByteBuf

        第二節: ByteBuf的分類

        第三節: 緩衝區分配器

        第四節: PooledByteBufAllocator簡述

        第五節: directArena分配緩衝區概述

        第六節: 命中緩存的分配

        第七節: page級別的內存分配

        第八節: Subpage級別的內存分配

        第九節: ByteBuf的回收

        第十節: SocketChannel讀取數據的過程

 

第六章: 解碼器

        第一節: ByteToMessageDecoder

        第二節: 固定長度解碼器

        第三節: 行解碼器

        第四節: 分隔符解碼器

 

第七章: 編碼器和寫數據

        第一節: writeAndFlush事件傳播

        第二節: MessageToByteEncoder

        第三節: 寫buffer隊列

        第四節: 刷新buffer隊列

        第五節: Future和Promise

 

第八章: 高性能工具類FastThreadLocal和Recycler

        第一節: FastThreadLocal的使用和建立

        第二節: FastThreadLocal的set方法

        第三節: recycler的使用和建立

        第四節: recycler中獲取對象

        第五節: 同線程回收對象

        第六節: 異線程回收對象

        第七節: 獲取異線程釋放的對象

 

下一節: 服務端初始化

相關文章
相關標籤/搜索