Netty是什么?為什么這么火?
Netty是目前最流行的由JBOSS提供的一個(gè)Java開源框架NIO框架,Netty提供異步的、事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用程序框架和工具,用以快速開發(fā)高性能、高可靠性的網(wǎng)絡(luò)服務(wù)器和客戶端程序。
相比JDK原生NIO,Netty提供了相對(duì)十分簡(jiǎn)單易用的API,非常適合網(wǎng)絡(luò)編程。Netty是完全基于NIO實(shí)現(xiàn)的,所以Netty是異步的。
作為一個(gè)異步NIO框架,Netty的所有IO操作都是異步非阻塞的,通過(guò)Future-Listener機(jī)制,用戶可以方便的主動(dòng)獲取或者通過(guò)通知機(jī)制獲得IO操作結(jié)果。
Netty無(wú)疑是NIO的老大,它的健壯性、功能、性能、可定制性和可擴(kuò)展性在同類框架都是首屈一指的。它已經(jīng)得到成百上千的商業(yè)/商用項(xiàng)目驗(yàn)證,如Hadoop的RPC框架Avro、RocketMQ以及主流的分布式通信框架Dubbo等等。
為什么這么火,是有原因的。
Netty的優(yōu)點(diǎn)可以總結(jié)如下
1、API使用簡(jiǎn)單,開發(fā)門檻低;
2、功能強(qiáng)大,預(yù)置了多種編解碼功能,支持多種主流協(xié)議;
3、定制能力強(qiáng),可以通過(guò)ChannelHandler對(duì)通信框架進(jìn)行靈活地?cái)U(kuò)展;
4、性能高,通過(guò)與其他業(yè)界主流的NIO框架對(duì)比,Netty的綜合性能最優(yōu);
5、成熟、穩(wěn)定,Netty修復(fù)了已經(jīng)發(fā)現(xiàn)的所有JDK NIO BUG,業(yè)務(wù)開發(fā)人員不需要再為NIO的BUG而煩惱;
6、社區(qū)活躍,版本迭代周期短,發(fā)現(xiàn)的BUG可以被及時(shí)修復(fù),同時(shí),更多的新功能會(huì)加入;
7、經(jīng)歷了大規(guī)模的商業(yè)應(yīng)用考驗(yàn),質(zhì)量得到驗(yàn)證。在互聯(lián)網(wǎng)、大數(shù)據(jù)、網(wǎng)絡(luò)游戲、企業(yè)應(yīng)用、電信軟件等眾多行業(yè)得到成功商用,證明了它已經(jīng)完全能夠滿足不同行業(yè)的商業(yè)應(yīng)用了。
與Mina相比有什么優(yōu)勢(shì)?
1、都是Trustin Lee的作品,Netty更晚;
2、Mina將內(nèi)核和一些特性的聯(lián)系過(guò)于緊密,使得用戶在不需要這些特性的時(shí)候無(wú)法脫離,相比下性能會(huì)有所下降,Netty解決了這個(gè)設(shè)計(jì)問(wèn)題;
3、Netty的文檔更清晰,很多Mina的特性在Netty里都有;
4、Netty更新周期更短,新版本的發(fā)布比較快;
5、它們的架構(gòu)差別不大,Mina靠apache生存,而Netty靠jboss,和jboss的結(jié)合度非常高,Netty有對(duì)google protocal buf的支持,有更完整的ioc容器支持(spring,guice,jbossmc和osgi);
6、Netty比Mina使用起來(lái)更簡(jiǎn)單,Netty里你可以自定義的處理upstream events或/和downstream events,可以使用decoder和encoder來(lái)解碼和編碼發(fā)送內(nèi)容;
7、Netty和Mina在處理UDP時(shí)有一些不同,Netty將UDP無(wú)連接的特性暴露出來(lái);而Mina對(duì)UDP進(jìn)行了高級(jí)層次的抽象,可以把UDP當(dāng)成"面向連接"的協(xié)議,而要Netty做到這一點(diǎn)比較困難。
希望篇文章可以幫助在這個(gè)行業(yè)發(fā)展的朋友和童鞋們,在論壇博客等地方少花些時(shí)間找資料,把有限的時(shí)間,真正花在學(xué)習(xí)上,有需要幫助或資料的朋友可以加Q群:813071032?相信對(duì)于已經(jīng)工作和遇到技術(shù)瓶頸或者寫博客碼友,都會(huì)有好的幫助。