Netty 簡介
1. 什么是 Netty
Netty 是由 JBOSS 提供的一個 Java 開源通訊框架,用以快速開發(fā)高性能、高可靠性的網(wǎng)絡 IO 程序。它底層很好地封裝了 Socket,處理網(wǎng)絡通信的一個開源通信框架。通俗說明,Netty 就是解決兩個系統(tǒng)之間互相通信的一個框架。
在 Java 領域 Netty 運用非常地廣泛,Tomcat、Dubbo、RocketMQ、Zookeeper、Spark、Flink、ElasticSearch 等等這些中間件的網(wǎng)絡通訊框架都是基于 Netty 去實現(xiàn)的。
其中 Netty 只是對 Java 原生的通信框架進行了高度的封裝,如下圖所示:
2. 市場占比
在 Java 語言當中 Netty 基本上是一支獨大,涉及到網(wǎng)絡通信基本上都是使用 Netty,很少去直接使用 NIO 或者其它類似的第三方框架,目前和 Netty 同一級別的框架主要是 mina,其實 mina 和 Netty 都是同一個人開發(fā)的,Netty 比 mina 更晚出現(xiàn),因此推薦 Netty。
相比 mina 那么 Netty 的優(yōu)勢是什么呢?
- Mina 將內(nèi)核和一些特性的聯(lián)系過于緊密,使得用戶在不需要這些特性的時候無法脫離,相比之下性能會有所下降,Netty 解決了這個設計問題;
- Netty 的文檔更清晰,很多 Mina 的特性在 Netty 里都有;
- Netty 比 Mina 使用起來更簡單,如果上手只需要掌握模板代碼 + 自定義 Handler 即可;
- 它們的架構(gòu)差別不大,Mina 靠 apache 生存,而 Netty 靠 jboss。Netty 有對 google protocal buf 的支持,有更完整的 IOC 容器支持。
3. Netty 特性
特性 | 說明 |
---|---|
完美設計 | 基于靈活、可擴展的事件驅(qū)動模型,可以靈活切換底層的線程模型、IO 模型等 |
高性能 | 高吞吐量、低延遲,盡量減少不必要的內(nèi)存拷貝 |
健壯性 | 1. 消除由于慢,快,或重載連接產(chǎn)生的 OutOfMemoryError;2. 消除經(jīng)常發(fā)生在 NIO 在高速網(wǎng)絡中的應用中的不公平的讀 / 寫比 |
易用性 | 1. 完善的文檔;2. 活躍的社區(qū);3. 簡單的 API 讓開發(fā)者能夠快速入門 |
內(nèi)置功能 | 1. 支持多種協(xié)議;2. 內(nèi)置很多的編解碼器;3. 內(nèi)置很多的拆包器 |
心跳檢測 | I/O 超時和 idle 狀態(tài)檢測 |
安全性 | 1. 解決了 NIO 存在的空輪詢問題;2. 更可靠的 OutOfMemoryError 預防;3. 應用程序的關閉更簡單,更安全 |
4. Netty 版本
目前 Netty 主要有三個大的版本
- 3.x 版本;
- 4.x 版本;
- 5.x 版本;
- 三大版本的差異比較大,目前項目開發(fā)的主流版本是 4.x,因此也建議大家主要學習 4.x 這個版本。
5. 為什么要學習 Netty
學習 Netty 的好處是什么呢?
- 掌握 Netty 及其原理,可以為自己找工作、面試時加分。并且讓自己的技能得到進階,是初中級邁向高級的門檻;
- 有助于學習和理解主流中間件的架構(gòu)思想,很多的中間件都是基于 Netty 去開發(fā)的,比如:Dubbo;
- Netty 用來系統(tǒng)網(wǎng)絡通信功能,是系統(tǒng)的基石,往往決定一個系統(tǒng)的性能,能否扛得住并發(fā);
- 對于學習和理解分布式架構(gòu)會有很大的幫助,分布式架構(gòu)下最核心環(huán)節(jié)就是應用之間的通訊。
6. 學習基礎
Netty 非常的復雜,不建議剛參加工作的同學直接學習它,這樣會給自己在學習上增加難度。
列舉一些學習 Netty 之前最好先掌握的技術點:
- 掌握多線程、線程池的使用;
- 掌握傳統(tǒng) IO(BIO)的使用,以及了解網(wǎng)絡 IO 和磁盤 IO 的基本使用;
- 掌握 Socket 的客戶端和服務端之間通訊實現(xiàn),了解其缺點是什么;
- 掌握 NIO 的思想,和 BIO 比較 NIO 的優(yōu)勢以及如何基于 NIO 去操作磁盤文件和網(wǎng)絡通訊,核心組件 Buffer、Channel、Selector 的使用;
- 掌握什么是直接緩沖區(qū)、非直接緩沖區(qū)、零拷貝;
- 掌握什么是序列化,序列化的原理、常用技術;
- 了解 TCP 協(xié)議、Http 協(xié)議之間的聯(lián)系、大概原理;
- 了解 IO 的多路復用大致原理,Epoll 的大概原理;
- 了解什么是長連接、短連接的概念和區(qū)別,以及它們的應用場景。
以上是列出一些可以說必備的技術點,掌握之后再去學習 Netty 將會非常的容易。
關注慕課網(wǎng)了解更多更優(yōu)質(zhì)的Netty教程。