匠心零度 轉載請註明原創出處,謝謝!編程
說在前面
爲何咱們須要學習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編程的首選框架。socket
我打算如何學習
因爲上面說的一些緣由,本身也準備學習下netty,我準備從如下幾方面進行學習,後續在慢慢在文章裏面展開怎麼學習。高併發
- Netty權威指南(買了本書準備系統學習下,目前真正看……)。
- 看牛逼人物的netty博客(好比我狼哥netty系列博客)。
- 準備基於netty4.x系列源碼看看。
結束語
上面的一些都是零度準備學習netty的一些思考和理解,若是有那裏不對歡迎留言區進行留言討論。oop
若是讀完以爲有收穫的話,歡迎點贊、關注、加公衆號【匠心零度】,查閱更多精彩歷史!!!
