大家好,我是老三,之前里,我們討論了Java的三種IO模型,提到了網(wǎng)絡(luò)通信框架Netty,它簡化和優(yōu)化了NIO的使用,這期,我們正式開始走近Netty。
為什么要用Netty?首先當然是NIO的使用,本身比較復(fù)雜,而且還存在一些問題。
(資料圖片僅供參考)
除此之外,如果在項目的開發(fā)中,要實現(xiàn)穩(wěn)定的網(wǎng)絡(luò)通信,就得考慮網(wǎng)絡(luò)的閃斷、客戶端的重復(fù)接入、客戶端的安全認證、消息的編解碼、半包讀寫……
所以,巧了,恰好有這么一個成熟穩(wěn)定、性能強大、開箱即用的網(wǎng)絡(luò)框架擺在我們面前,相比較Java NIO,Netty更加出色:
易用性: Netty 在 NIO 基礎(chǔ)上進行了更高層次的封裝,屏蔽了 NIO 的復(fù)雜性,大大降低了開發(fā)難度;Netty 提供了很多開箱即用的工具,例如常用的行解碼器、長度域解碼器等,不需要自己再實現(xiàn)。穩(wěn)定性: Netty 更加可靠穩(wěn)定,修復(fù)和完善了 JDK NIO 較多已知問題,例如臭名昭著的 select 空轉(zhuǎn)導(dǎo)致 CPU 消耗 100%,TCP 斷線重連,keep-alive 檢測等問題。可擴展性: Netty 的的可擴展性做的非常好,比如支持可定制化的線程模型。我們有什么理由拒絕這么一款優(yōu)秀的網(wǎng)絡(luò)通信框架呢?代碼怎么寫不是寫嘍!
初識Netty什么是Netty?Netty官方是這么定義Netty的:
Netty 是一個異步事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用程序框架,用于快速開發(fā)可維護的高性能協(xié)議服務(wù)器和客戶端。
組成圖-來源官方
Netty是一個開源的、單線程模型的 Java 網(wǎng)絡(luò)編程框架。Netty基于 NIO ,被廣泛應(yīng)用于各種網(wǎng)絡(luò)應(yīng)用程序開發(fā)。Netty支持多種協(xié)議,包括但不限于 HTTP、WebSocket、TCP、UDP 和 SSL/TLS 協(xié)議等。Netty 是非阻塞的,事件驅(qū)動的框架。Netty具有高性能、可擴展和易于使用的優(yōu)點。Netty的現(xiàn)狀?Netty 由 JBoss 社區(qū)開發(fā)維護的,它的社區(qū)相對比較活躍:
https://github.com/netty/netty:Github已經(jīng)收獲31.2K星標https://netty.io/:官方網(wǎng)站,提供了比較完整的文檔官方目前最新的版本是5.x,,但是很不幸,已經(jīng)被社區(qū)放棄開發(fā)維護,屬于廢棄版本,最新的穩(wěn)定版本是4.x 。
一般使用,推薦4.x,Netty 4.x對3.x不做兼容,我們后續(xù)的學(xué)習(xí)也基于Netty 4.x版本。
誰在用Netty?作為最流行的網(wǎng)絡(luò)通信框架,大量的公司選擇它作為底層網(wǎng)絡(luò)通信框架,包括不限于:
使用Netty的公司
我們可能自己沒有直接用過Netty,但其實熟悉的很多開源中間件,都用到了Netty,比如:
服務(wù)治理:Apache Dubbo、gRPC。大數(shù)據(jù):Hbase、Spark、Flink、Storm。搜索引擎:Elasticsearch。消息隊列:RocketMQ、ActiveMQ。用到Netty的優(yōu)秀產(chǎn)品非常多,大家感興趣可以看看:https://netty.io/wiki/related-projects.html。
從"Hello World"開始氣氛襯托到這,不寫個Demo也過不去,還是從"Hello World"開始,我們領(lǐng)略一下Netty的風(fēng)采。
創(chuàng)建一個Maven項目:這個就不用多說了吧創(chuàng)建Maven項目
導(dǎo)入依賴:我們直接用4.x最新的版本
編寫代碼:那么我們就開始編寫這個Demo的服務(wù)器和客戶端相關(guān)代碼NettyServer:基于Netty的客戶端
Date: 2023/5/14 10:29 Author: fighter3 Description: Netty服務(wù)端Demo/** *
NettyServerHandler:服務(wù)器的消息處理器,用于處理各種事件
Date: 2023/5/14 10:30 Author: fighter3 Description: Netty服務(wù)器消息處理器/** *
NettyClient:使用Netty的客戶端,通過ip和端口連接服務(wù)端
Date: 2023/5/14 10:32 Author: fighter3 Description: Netty客戶端Demo/** *
NettyClientHandler:Netty客戶端處理器,用于處各種事件
Date: 2023/5/14 10:33 Author: fighter3 Description: Netty客戶端處理器/** *
運行一下:先啟動NettyServer,再啟動NettyClient,看下運行結(jié)果
============Netty服務(wù)器啟動...=============Netty服務(wù)器監(jiān)聽端口:8888客戶端發(fā)來的消息:大佬,帶帶我!
===========Netty客戶端連接服務(wù)端=========服務(wù)端發(fā)來的消息:你好,靚仔!
好了,一個簡單的Netty入門Demo就寫完了,Netty是一個雙工通信的網(wǎng)絡(luò)框架,可以看到,服務(wù)端和客戶端,流程基本上一致,主要包括這么幾個步驟:
創(chuàng)建事件循環(huán)組和相關(guān)對象,用于監(jiān)聽和處理網(wǎng)絡(luò)事件;配置 Netty 服務(wù)器或客戶端的啟動參數(shù),包括線程組、通道類型、TCP 參數(shù)等;給服務(wù)器或客戶端的 ChannelPipeline 添加各種 ChannelHandler,用于處理不同的網(wǎng)絡(luò)事件;綁定端口啟動服務(wù)器或連接服務(wù)器;等待服務(wù)器或客戶端連接關(guān)閉,釋放相關(guān)資源。服務(wù)器&客戶端初始化啟動流程
雖然這個Demo比較簡單,但其實已經(jīng)用到了Netty里幾個比較關(guān)鍵的組件:
ByteBuf:Netty 的字節(jié)容器,類似于 Java 的 ByteBuffer,但是提供了更加強大、簡便且安全的 API,用于在網(wǎng)絡(luò)中傳遞二進制數(shù)據(jù);EventLoopGroup:Netty 的事件循環(huán)組,用于管理和調(diào)度連接到服務(wù)器或者從服務(wù)器連接出去的所有 Channel 上的事件循環(huán);ServerBootstrap:Netty 的服務(wù)器啟動類,用于啟動和配置一個 TCP/IP 服務(wù)器;Bootstrap:Netty 的客戶端啟動類,用于啟動和配置一個 TCP/IP 客戶端;Channel:Netty 的核心概念,用于表示一個通信通道,可以讀取和寫入數(shù)據(jù);ChannelPipeline:Netty 的 Channel 處理器,用于在傳入的數(shù)據(jù)上執(zhí)行一組 ChannelHandler;ChannelHandler:Netty 的核心組件,用于處理各種通信事件,例如讀取數(shù)據(jù)、寫數(shù)據(jù)、建立連接等;Netty的重要組件
后續(xù),我們還會和這些組件打更多的交道。
好了,那么這期內(nèi)容就到這了,這期里我們初步了解了Netty,包括什么是Netty、Netty現(xiàn)狀、Netty的應(yīng)用,還寫了一個簡單的Demo。下一期,我們繼續(xù)深入了解Netty,敬請期待。
參考:[1].https://netty.io/
[2].《Netty權(quán)威指南》
[3]. 《Netty核心原理剖析與RPC實踐》
標簽:
大家好,我是老三,之前里,我們討論了Java的三種IO模型,提到了網(wǎng)...
格隆匯5月23日丨智云健康發(fā)布公告,董事會獲公司若干高級管理層成員...
在市場預(yù)期范圍內(nèi),LPR報價已連續(xù)第9個月“按兵不動”。5月22日,據(jù)...
摩根大通商業(yè)銀行業(yè)務(wù)主管DougPetno:摩根大通商業(yè)地產(chǎn)貸款組合中辦...
湖南日報5月22日訊(全媒體記者奉永成)“聽說你們的金牌‘店小二’...
老山界,在地圖上名為越城嶺,又稱瑤山,是五嶺之一,越城嶺的中段...
5月22日,寵物生活方式DTC品牌PAWKA泡咔(以下稱“泡咔”)宣布,已...
“賽前已經(jīng)感覺到對手球路會讓我有些不舒服,畢竟他是從中國過去的...
有過買賣房子經(jīng)歷的人,或許都繞不開房產(chǎn)中介。在房地產(chǎn)行業(yè)調(diào)控的...
【900億隔膜巨頭起訴事關(guān)這家比亞迪參投IPO公司】5月22日,市值超90...
為進一步做好道路交通安全和運輸執(zhí)法領(lǐng)域突出問題專項整治社會面宣...
5月19日,關(guān)嶺自治縣舉行2023年全國老年人太極拳健身推廣展示大聯(lián)動...
今天來聊聊關(guān)于福建省福州晉安區(qū)郵編,福州晉安區(qū)郵編的文章,現(xiàn)在...
恒生前海恒悅純債增聘基金經(jīng)理呂程
今天來聊聊關(guān)于三國群英傳mod合集電腦版,三國群英傳7哪個mod好玩的...
財政部下達100億元補助資金預(yù)算支持改善普通高中學(xué)校辦學(xué)條件-鄭州...
索辰科技近期披露投資者關(guān)系活動記錄表顯示,公司目前已形成流體、...
【搭子在年輕人中流行】“上班隨時在線,下班立即失聯(lián)。”你以為這...
為進一步落實就業(yè)服務(wù)保障工作,切實幫助有意愿就業(yè)的勞動者和就業(yè)...
今天來聊聊關(guān)于雪花影院電影在線觀看高清,97dyycom的文章,現(xiàn)在就...
Mysteel:機械原材料周報(5 15-5 19)
獨秀故里,“藍”以忘“懷”。5月20日,第六屆中國懷寧藍莓文化旅游...
界面新聞記者|王婷婷房地產(chǎn)行業(yè)的代建風(fēng)浪正如潮涌至。兩年前開發(fā)商...
佛山2023年5月19日 美通社 --5月18日,2023年中國家用電器技術(shù)大...
【權(quán)威發(fā)布·在自治區(qū)例行新聞發(fā)布會上】天山網(wǎng)-新疆日報訊(記者王...
韓方呼吁中方推遲對韓產(chǎn)鋰電池執(zhí)行強制性產(chǎn)品認證認證(觀察著網(wǎng)訊)...
5月19日,硅烷科技(838402)融資買入1 1萬元,融資償還5 42萬元...
黑色四葉草漫畫迎來了第359話的更新,在這一話中,繼續(xù)來到了盧修斯...
同花順F10數(shù)據(jù)顯示,2023年5月22日登康口腔(001328)新增“深股通...
今天來聊聊關(guān)于的誘惑游戲,邪惡性游戲之致命誘惑的文章,現(xiàn)在就為...
廣告
X 關(guān)閉
廣告
X 關(guān)閉