Netty(一):入門篇
匠心零度 轉載請註明原創出處,謝謝!
說在前面
上篇文章對Netty進行了初探:Netty初探,主要介紹了下我們為什麽需要學習netty、netty介紹等;本篇文章接著上篇文章的內容。本篇為了方便大家快速入門、了解實踐Netty特性、快速上手一個例子讓大家有一個比較直接的認識。
主題
- 版本選擇及說明
- 快速入門
- 總結
版本選擇及說明
版本的選擇,這是一個很直接但是又經常需要面對的問題,特別是開源項目的時候,我們在選擇版本的時候有很多考慮,比較jdk各個版本選擇、zookeeper版本的選擇、Tomcat版本選擇,Spring系列版本選擇等等,後續後空我們可以討論討論關於開源這些版本選擇以及升級事宜交流,今天的重點是在netty版本的選擇上面。
netty目前版本說明
目前Netty大版本就分為三個:3.x、4.x、5.x。
我們先看看官網怎麽說:
備註:推薦使用的版本是4.x,那麽我們再看看很多使用Netty的一些項目,的確使用的是4.x版本,據了解Dubbo3.x將會將Netty4.0.x升級到4.1.x版本。
看看官網:
備註:如果是在項目中進行使用那麽我們可能會選擇4.1.x的比如其他版本,需要考慮穩定性等,一般很少選擇最新的,但是我們是來學習netty,那麽我建議就選擇最新版本:4.1.21.Final版本。,因為當我們學習完了之後,可能已經很久了,21版本估計也穩定了,並且都是4.1x版本,一般僅僅是一些小的改動,就算後面選擇新版本學習應該也不是特別困難。
Netty4.1.x簡單介紹
建議看官網New and noteworthy in 4.1(http://netty.io/wiki/new-and-noteworthy-in-4.1.html),先了解下有那些大概的變動(不要認為之前沒用過,看就沒有必要,看看也是它的一些亮點,後續可能要重點學習了解思考的)
主要改變:
- Android support
- ChannelHandlerContext.attr(..) == Channel.attr(..)
- Channel.hasAttr(...)
- Easier and more precise buffer leak tracking
- PooledByteBufAllocator as the default allocator
- Globally unique channel ID
- EmbeddedChannel usability
- Ability to use Executor instead of ThreadFactory
- Class loader friendliness
- ByteBufAllocator.calculateNewCapacity()
備註:具體詳情記得去官網看看:http://netty.io/wiki/new-and-noteworthy-in-4.1.html,這次可以大概了解下,後續有空慢慢看看。
快速入門
說了那麽多了,我們來一個簡單的Demo來簡單的感受下Netty。
maven構建項目
新建一個Maven項目,之後去github上面找到netty對應的例子代碼:
放到項目中,代碼結構如圖:
pom.xml中添加如下內容:
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.21.Final</version>
</dependency>
稍微在原來demo基礎上面修改了點東西,解決半包、黏包問題(後續詳細介紹)
以及發送內容等信息。
我已經把代碼提交到github上面去了,需要的小夥伴可以直接下載:https://github.com/lirenzuo/nettydemo。
運行效果截圖
可以與使用nio寫的代碼進行對比,NIO相關基礎篇二,發現用Netty寫一個TCP原來這麽簡單,都封裝好了。
總結
使用Netty可以非常方便、快速的搭建網絡開發環境,使得我們不用關心一些例如客戶端面臨斷連重連、網絡閃斷、半包讀寫、失敗緩存、網絡擁塞和異常碼流的處理等等的問題,所以使用Netty進行網絡開發是非常合適的,本篇只是一個入門,後續有了Demo可以跑起來的時候,進行斷點啥的也好進行學習了。
如果讀完覺得有收獲的話,歡迎點贊、關註、加公眾號【匠心零度】,查閱更多精彩歷史!!!
Netty(一):入門篇