使用NIO實(shí)現(xiàn)一個(gè)Netty網(wǎng)絡(luò)框架?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
成都創(chuàng)新互聯(lián)公司長(zhǎng)期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為府谷企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,府谷網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。Netty是一個(gè)高性能、異步事件驅(qū)動(dòng)的NIO框架,它提供了對(duì)TCP、UDP和文件傳輸?shù)闹С?,Netty的所有IO操作都是異步非阻塞的,通過(guò)Future-Listener機(jī)制,用戶可以方便的主動(dòng)獲取或者通過(guò)通知機(jī)制獲得IO操作結(jié)果。
Netty的優(yōu)點(diǎn)有:
a、功能豐富,內(nèi)置了多種數(shù)據(jù)編解碼功能、支持多種網(wǎng)絡(luò)協(xié)議。
b、高性能,通過(guò)與其它主流NIO網(wǎng)絡(luò)框架對(duì)比,它的綜合性能最佳。
c、可擴(kuò)展性好,可通過(guò)它提供的ChannelHandler組件對(duì)網(wǎng)絡(luò)通信方面進(jìn)行靈活擴(kuò)展。
d、易用性,API使用簡(jiǎn)單。
e、經(jīng)過(guò)了許多商業(yè)應(yīng)用的考驗(yàn),在互聯(lián)網(wǎng)、網(wǎng)絡(luò)游戲、大數(shù)據(jù)、電信軟件等眾多行業(yè)得到成功商用。
Netty采用了典型的三層網(wǎng)絡(luò)架構(gòu)進(jìn)行設(shè)計(jì),邏輯架構(gòu)圖如下:
第一層:Reactor通信調(diào)度層。該層的主要職責(zé)就是監(jiān)聽(tīng)網(wǎng)絡(luò)的連接和讀寫(xiě)操作,負(fù)責(zé)將網(wǎng)絡(luò)層的數(shù)據(jù)讀取到內(nèi)存緩沖區(qū)中,然后觸發(fā)各種網(wǎng)絡(luò)事件,例如連接創(chuàng)建、連接激活、讀事件、寫(xiě)事件等,將這些事件觸發(fā)到Pipeline中,再由Pipeline充當(dāng)?shù)穆氊?zé)鏈來(lái)進(jìn)行后續(xù)的處理。
第二層:職責(zé)鏈Pipeline層。負(fù)責(zé)事件在職責(zé)鏈中有序的向前(后)傳播,同時(shí)負(fù)責(zé)動(dòng)態(tài)的編排職責(zé)鏈。Pipeline可以選擇監(jiān)聽(tīng)和處理自己關(guān)心的事件。
第三層:業(yè)務(wù)邏輯處理層,一般可分為兩類(lèi):a. 純粹的業(yè)務(wù)邏輯處理,例如日志、訂單處理。b. 應(yīng)用層協(xié)議管理,例如HTTP(S)協(xié)議、FTP協(xié)議等。
我們都知道影響網(wǎng)絡(luò)服務(wù)通信性能的主要因素有:網(wǎng)絡(luò)I/O模型、線程(進(jìn)程)調(diào)度模型和數(shù)據(jù)序列化方式。
在網(wǎng)絡(luò)I/O模型方面,Netty采用基于非阻塞I/O的實(shí)現(xiàn),底層依賴的是JDKNIO框架的Selector。
在線程調(diào)度模型方面,Netty采用Reactor線程模型。常用的Reactor線程模型有三種,分別是:
a、Reactor單線程模型:Reactor單線程模型,指的是所有的I/O操作都在同一個(gè)NIO線程上面完成。對(duì)于一些小容量應(yīng)用場(chǎng)景,可以使用單線程模型。
b、Reactor多線程模型:Rector多線程模型與單線程模型大的區(qū)別就是有一組NIO線程處理I/O操作。主要用于高并發(fā)、大業(yè)務(wù)量場(chǎng)景。
c、主從Reactor多線程模型:主從Reactor線程模型的特點(diǎn)是服務(wù)端用于接收客戶端連接的不再是一個(gè)單獨(dú)的NIO線程,而是一個(gè)獨(dú)立的NIO線程池。利用主從NIO線程模型,可以解決一個(gè)服務(wù)端監(jiān)聽(tīng)線程無(wú)法有效處理所有客戶端連接的性能不足問(wèn)題。Netty線程模型并非固定不變的,它可以支持三種Reactor線程模型。
在數(shù)據(jù)序列化方面,影響序列化性能的主要因素有:
a、序列化后的碼流大?。ňW(wǎng)絡(luò)帶寬占用)。
b、序列化和反序列化操作的性能(CPU資源占用)。
c、并發(fā)調(diào)用時(shí)的性能表現(xiàn):穩(wěn)定性、線性增長(zhǎng)等。
Netty默認(rèn)提供了對(duì)GoogleProtobuf二進(jìn)制序列化框架的支持,但通過(guò)擴(kuò)展Netty的編解碼接口,可以實(shí)現(xiàn)其它的高性能序列化框架,例如Avro、Thrift的壓縮二進(jìn)制編解碼框架。
看完上述內(nèi)容,你們掌握使用NIO實(shí)現(xiàn)一個(gè)Netty網(wǎng)絡(luò)框架的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!