匠心零度 轉載請註明原創出處,謝謝!
說在前面
**為什麼我們需要學習netty?**談談自己的看法,由於本人水平有限,如果有那裡不對,希望各位大佬積極指出,歡迎在留言區進行評論交流、探討。
由於移動網際網路的爆發性的增長,帶來了很多機遇與挑戰,其中一項就是把有些http協議呼叫修改為基於TCP自定義協議方式的長連線呼叫了,讓我想起來了一句話:天下武功無堅不破 唯快不破。,所有的出發點都是為了快,並且現在很多網際網路上面的專案比如Dubbo、Hadoop系列,MQ等都在使用netty了,如果沒有使用到這些使用netty的產品,需要實現通訊使用socket的確也可以,但是實現複雜容易有bug。
主題
- 為什麼需要學習netty?
- netty簡介。
- 我打算如何學習。
為什麼需要學習netty?
說說netty之前,我們先看看使用jdk原生nio程式設計的一些問題:
- NIO的類庫和API繁雜,使用麻煩,你需要熟練掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。
- 需要具備其他的額外技能做鋪墊,例如熟悉Java多執行緒程式設計。這是因為NIO程式設計涉及到Reactor模式,你必須對多執行緒和網路程式設計非常熟悉,才能編寫出高質量的NIO程式。
- 可靠效能力補齊,工作量和難度都非常大。例如客戶端面臨斷連重連、網路閃斷、半包讀寫、失敗快取、網路擁塞和異常碼流的處理等問題,NIO程式設計的特點是功能開發相對容易,但是可靠效能力補齊的工作量和難度都非常大。
- JDK NIO的BUG,例如臭名昭著的epoll bug,它會導致Selector空輪詢,最終導致CPU 100%。官方聲稱在JDK 1.6版本的update18修復了該問題,但是直到JDK 1.7版本該問題仍舊存在,只不過該BUG發生概率降低了一些而已,它並沒有得到根本性解決。
netty是一個優秀的框架,為什麼我們還要學習呢?
- 你只有熟悉才可以更好的使用。
- 你不想看看為什麼netty這麼優秀的? 怎麼解決一些原生nio的問題的?
- 方便日後的維護、擴充套件、定製等。
- 如何考慮提高併發效能,如何把執行緒玩轉的? 等等。
netty簡介
Netty是業界最流行的NIO框架之一,它的健壯性、功能、效能、可定製性和可擴充套件性在同類框架中都是首屈一指的,它已經得到成百上千的商用專案驗證,例如Hadoop的RPC框架Avro就使用了Netty作為底層通訊框架,其他還有業界主流的RPC框架,也使用Netty來構建高效能的非同步通訊能力。
通過對Netty的分析,我們將它的優點總結如下。
- API使用簡單,開發門檻低;
- 功能強大,預置了多種編解碼功能,支援多種主流協議;
- 定製能力強,可以通過ChannelHandler對通訊框架進行靈活地擴充套件;
- 效能高,通過與其他業界主流的NIO框架對比,Netty的綜合效能最優;
- 成熟、穩定,Netty修復了已經發現的所有JDK NIO BUG,業務開發人員不需要再為NIO的BUG而煩惱;
- 社群活躍,版本迭代週期短,發現的BUG可以被及時修復,同時,更多的新功能會加入;
- 經歷了大規模的商業應用考驗,質量得到驗證。Netty在網際網路、大資料、網路遊戲、企業應用、電信軟體等眾多行業已經得到了成功商用,證明它已經完全能夠滿足不同行業的商業應用了。
正是因為這些優點,Netty逐漸成為了Java NIO程式設計的首選框架。
我打算如何學習
由於上面說的一些原因,自己也準備學習下netty,我準備從以下幾方面進行學習,後續在慢慢在文章裡面展開怎麼學習。
- Netty權威指南(買了本書準備系統學習下,目前真正看……)。
- 看牛逼人物的netty部落格(比如我狼哥netty系列部落格)。
- 準備基於netty4.x系列原始碼看看。
結束語
上面的一些都是零度準備學習netty的一些思考和理解,如果有那裡不對歡迎留言區進行留言討論。
如果讀完覺得有收穫的話,歡迎點贊、關注、加公眾號【匠心零度】,查閱更多精彩歷史!!!