在開始本文之前,我先講一件自己親身經曆的事:大約在2011年的時候,周邊的兩個業務團隊同時進行新版本開發,他們都需要基于nio非阻塞特性建構高性能、異步和高可靠性的底層通信架構。
當時兩個項目組的設計師都咨詢了我的意見,在了解了兩個項目團隊的nio程式設計經驗和現狀之後,我建議他們都使用netty建構業務通信架構。令人遺憾的是其中1個項目組并沒有按照我的建議做,而是選擇直接基于jdk的nio類庫建構自己的通信架構。在他們看來,建構業務層的nio通信架構并不是件難事,即便目前他們還缺乏相關經驗。
兩個多月過去之後,自研nio架構團隊的通信架構始終無法穩定的工作,他們頻繁遭遇用戶端斷連、句柄洩露和消息丢失等問題。項目的進度出現了嚴重的延遲;形成鮮明對比的是,另一個團隊由于基于netty研發,在通信架構上節省了大量的人力和時間,加之netty自身的可靠性和穩定性非常好,他們的項目進展非常順利。
這兩個項目組的不同遭遇告訴我們:開發高品質的nio程式并不是一件簡單的事情,除去nio類庫的固有複雜性和bug,作為nio服務端,需要能夠處理網絡的閃斷、用戶端的重連、安全認證和消息的編解碼、半包處理等。如果沒有足夠的nio程式設計經驗積累,自研nio架構往往需要半年甚至數年的時間才能最終穩定下來,這種成本即便對一個大公司而言也是個嚴重的挑戰。
資料流處理、應用程式開啟、處理協定編碼等工作因為netty都變得更加簡單,也正因如此,掌握netty也成為了搶手java開發的必備素質。
本文 從socket例子入手,一步步深入探究netty源碼,剖析代碼背後的原理,解決面試中遇到的netty問題,徹底掌握netty。
大小8.23g,mp4格式