個人博客:https://elltor.com/
摘要:這是最近學習的一些成果,預(yù)計會有十幾篇文章,我準備用通俗語言把它分享給你,讓你學習Neety變的Easy,敬請期待。
當我們打開Netty官網(wǎng),會看到一個赫然的標題。
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.
譯文:Netty是一個異步事件驅(qū)動網(wǎng)絡(luò)編程框架,用于快速開發(fā)可維護的高性能協(xié)議服務(wù)器和客戶端。
從中我們提取一些重點:異步、事件驅(qū)動、協(xié)議、服務(wù)器和客戶端。
沒錯,這就是Netty的特點,基于Reactor線程模型異步能力,基于epoll處理IO的能力,內(nèi)置了許多協(xié)議處理器和編解碼器,只需要簡單配置,就能實現(xiàn)高性能的服務(wù)器-客戶端應(yīng)用。
Netty發(fā)展十幾年,Java生態(tài)許多高性能的中間件都是用了它,例如:Apache Flink、Apache Spark、Elastic Search等,這說明Netty是優(yōu)良網(wǎng)絡(luò)編程框架。
P.S. 你可以點擊這個鏈接了解使用Netty的開源項目 https://netty.io/wiki/related-projects.html
那么Netty有哪些優(yōu)點呢?以下是幾點(不是以上的特點)
- 基于Reactor模型
- 使用直接內(nèi)存避免拷貝開銷
- 提供了多種協(xié)議的編解碼器,開箱即用
- 提供了測試工具、內(nèi)存泄露檢測工具等
單拿協(xié)議處理器來說,Netty實現(xiàn)了一下協(xié)議的處理器,開箱即用!
| 協(xié)議 | 說明 |
|---|---|
| HTTP/HTTP2/Websocket | / |
| DNS | 域名解析服務(wù) |
| MQTT | 消息隊列遙測傳輸協(xié)議,低功耗的消息傳輸協(xié)議,常用在移動設(shè)備的消息推送 |
| SMTP | 簡單郵件協(xié)議 |
| SOCKS | 一種用于穿透內(nèi)網(wǎng)防火墻的協(xié)議,常實現(xiàn)代理服務(wù)器 |
| SCTP | 一種基于TCP、UDP優(yōu)點的傳輸協(xié)議,適用于音視頻傳輸,WebRTC技術(shù)就應(yīng)用了這種協(xié)議 |
| STOMP | 一種簡單消息傳輸協(xié)議 |
| UDT | 基于UDP的可靠傳輸協(xié)議,現(xiàn)在已經(jīng)廢棄 |
相信到這里你已經(jīng)有些心動了,當你使用Netty實現(xiàn)一個CS程序時你會不由地感嘆Netty的強大與便捷。
Netty核心組件簡介
- Channel:對應(yīng)于網(wǎng)絡(luò)的Socket,是一個雙向管道,即可以寫數(shù)據(jù)又可以讀數(shù)據(jù)。
- EventLoop:事件循環(huán),每一個事件循環(huán)僅與一個線程綁定,用來處理epoll事件。
- Handler:所有的數(shù)據(jù)讀寫、編解碼、計算等都在這里進行,可以說它是Netty業(yè)務(wù)邏輯處理等單元。
- Codec:編輯碼器,對讀取的數(shù)據(jù)進行解碼,對將要發(fā)送的數(shù)據(jù)進行編碼,另外它還負責數(shù)據(jù)壓縮和協(xié)議轉(zhuǎn)換。
- Pipeline:是Handler鏈的容器,可以說是業(yè)務(wù)邏輯處理的大動脈,所有的IO事件都在這里流轉(zhuǎn)。
- ChannelFeaure:代表channel處理的一個結(jié)果。
- ChannelHandlerContext:處理器Handler的上下文,從中可以獲取Channel,或者進行讀寫操作關(guān)閉鏈接等操作。
網(wǎng)絡(luò)編程的注意點有哪些?
網(wǎng)絡(luò)編程總是跟并發(fā)密切相關(guān),當你寫完第一個網(wǎng)絡(luò)編程程序會有更加深刻的體會,第一個點是注意線程安全,防止數(shù)據(jù)出現(xiàn)不一致。
第二點,數(shù)據(jù)傳輸安全,通常在沒有SSL/TLS保護的應(yīng)用程是不安全的。
第三點,數(shù)據(jù)完整性,避免數(shù)據(jù)缺失等。
先到這里,Netty還有很多??技術(shù),比如FastThreadLocal、Jemalloc等,下回見。