Netty淺析 - 3. 總結
前言
本篇為《Netty淺析》系列最後一篇,主要對Netty做簡單的總結,如果對Netty的細節感興趣,可以閱讀本系列的另外兩篇:
- ofollow,noindex">Netty淺析 - 1. 基礎
- Netty淺析 - 2. 實現
Netty適用場景
Netty只是一套網路框架,它不可能適用於所有場景,所以選用Netty前最好能想清楚它是否能很好的應對自己的需求。想要知道Netty的適用場景最好的方式就是從Netty本身的特性出發進行思考,具體可參考本系列第一篇Netty淺析 - 1. 基礎中"Netty的特色"章節,基於此,如果你的需求屬於下列場景,則Netty會比較適合你,包括:
而其他情況,Netty並一不定適合,如:
- 需求較簡單的網路應用,則不必使用Netty,畢竟在能滿足需求的基礎上,越簡單越好
- 單次請求處理耗時較長的應用,這種情況下NIO沒有優勢,此時使用BIO的方式可能效果會更好
Netty支援的協議
Netty框架本身已經對常用的協議進行了實現,包括:
- 應用層:HTTP,Socket/">WebSocket,HTTP2,Redis,SMTP,DNS,MQTT,SSL,STARTTLS ,RTSP
- 傳輸層:TCP,UDP,SCTP,UDT等
- 其他:Protobuf,gzip
可以說,一般的應用使用Netty本身的支援就能滿足大部分需求,剩下的關注自己的業務即可
Netty & MINA & Jetty
Netty和MINA經常會放在一起比較,主要是因為兩個框架有很多相似的地方,或者說它們本身就是一對兄弟 -- 都是基於Java NIO封裝的一個網路框架。其實更深入的瞭解會發現,Netty的作者Trustin Lee 也是MINA的作者(當然已經不繼續參與了),據說他是對MINA的程式碼不滿意,才重新寫了Netty,所以看Netty的程式碼經常能看到MINA的影子,但就現在來說Netty的社群遠比MINA要活躍,迭代頻率也更高,大部分的特性也優於MINA
至於Jetty之所以會拿來比較,主要是因為和Netty名字類似,但其實兩個並沒有很大的可比性,因為Jetty是一個輕量級的servlet容器,而Netty是一個基於NIO的非同步網路程式設計框架,基於Netty可以實現自己的servlet容器或者其它網路應用
相關專案
很多專案內部都使用Netty作為其網路處理模組,主要包括:
總結
本系列主要針對Netty的基礎概念,框架結構及特色機制做了淺顯的分析,由於本人水平有限,難免有錯誤和不合適的地方,望大家不吝指出。Netty本身是一個優秀的框架,其原始碼的層次和結構也很清晰,值得一讀;平常很多人說熟悉網路,但是大部分人也僅僅只是知道一些皮毛(也包括我自己),其實,想要寫一個健壯易用的網路框架並不容易,而如果需要同時支援高併發,那更是難上加難,而Netty在這一點就做得很出色,它的出色除開本身優秀的程式碼組織外,更多的還是把一些已有的功能和思想進行合適的組裝和適當的優化。另外,結合當今另一個炙手可熱的高效能伺服器Nginx會發現,Netty和Nginx的思想有很多相通之處,如都是基於事件機制,都是分為主工作組與子工作組,都是在PipeLine上設定一系列的Handler進行資料處理,都有通過邏輯對映增強記憶體效率的設計等等,很有意思,感興趣的小夥伴可以找尋相關資料進行深入研究