1. 程式人生 > >Netty原始碼剖析(前言,概述及目錄)

Netty原始碼剖析(前言,概述及目錄)

 

前言

 

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

    為此詳細閱讀了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也不是不可能

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

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