Netty初探

匠心零度發表於2018-02-01

匠心零度 轉載請註明原創出處,謝謝!

說在前面

**為什麼我們需要學習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的一些思考和理解,如果有那裡不對歡迎留言區進行留言討論。


如果讀完覺得有收穫的話,歡迎點贊、關注、加公眾號【匠心零度】,查閱更多精彩歷史!!!

Netty初探