netty實現(xiàn)原理淺析-java開發(fā)java經(jīng)驗技巧

netty實現(xiàn)原理淺析-java開發(fā)java經(jīng)驗技巧

ID:30790886

大小:852.73 KB

頁數(shù):14頁

時間:2019-01-03

netty實現(xiàn)原理淺析-java開發(fā)java經(jīng)驗技巧_第1頁
netty實現(xiàn)原理淺析-java開發(fā)java經(jīng)驗技巧_第2頁
netty實現(xiàn)原理淺析-java開發(fā)java經(jīng)驗技巧_第3頁
netty實現(xiàn)原理淺析-java開發(fā)java經(jīng)驗技巧_第4頁
netty實現(xiàn)原理淺析-java開發(fā)java經(jīng)驗技巧_第5頁
資源描述:

《netty實現(xiàn)原理淺析-java開發(fā)java經(jīng)驗技巧》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、Netty實現(xiàn)原理淺析-編程開發(fā)技術(shù)Netty實現(xiàn)原理淺析原文出處:kafka0102的博客Netty是JBoss出品的高效的JavaNI0開發(fā)框架,關(guān)于其使用,可參考我的另一篇文章?nctty使用初步。木文將主要分析Netty實現(xiàn)方面的東西,由于精力冇限,本人并沒冇對其源碼做了極細(xì)致的研究。如果下而的內(nèi)容冇錯誤或不嚴(yán)謹(jǐn)?shù)牡胤?,也請指正和諒解。對于Netty使用者來說,Netty提供了兒個典型的example,并有詳盡的APIdoc和guidedoc,木文的一些內(nèi)容及圖示也來自于Netty的文檔,特此致謝。1、總體結(jié)構(gòu)T?ansportServices

2、BlockingOldI/OSockethansportHTTPGoogleProtobufTextLineProtocolsBinaryProtocolsCodecFrameworkNon-blockingNIOSocket"ansportProtocolSupportExtensibleEventModelOOM-ProofThreadPoolSSL/StartTLSContainer1ntegrationOSGiJBossMCSpringGuiceSecuritySupportUniversalCommunicationAPIZero-Copy-

3、CapableRichByteBuffer先放上一張漂亮的Netty總體結(jié)構(gòu)圖,下面的內(nèi)容也主要圍繞該圖上的一些核心功能做分析,但對如ContainerIntegration及SecuritySupport等高級可選功能,木文不予分析。2、網(wǎng)絡(luò)模型Netty是典型的Reactor模型結(jié)構(gòu),關(guān)于Reactor的詳盡闡釋,可參考P0SA2,這里不做概念性的解釋。而應(yīng)用JavaNIO構(gòu)建Reactor模式,DougLea(就是那位讓人無限景仰的大爺)在"Scalable10inJava"中給了很好的闡述。這里截取其PPT屮經(jīng)典的圖例說明Reactor模式的典

4、型實現(xiàn):1、這是最簡單的單Reactor單線程模型。Reactor線程是個多而手,負(fù)責(zé)多路分離套接字,Accept新連接,并分派請求到處理器鏈中。該模型適用于處理器鏈屮業(yè)務(wù)處理組件能快速完成的場景。不過,這種單線程模型不能充分利用多核資源,所以實際使用的不多。2、相比上一種模型,該模型在處理器鏈部分采用了多線程(線程池),也是后端程序常用的模型。3、第二種模型比起第二種模型,是將Reactor分成兩部分,mainRcactor負(fù)責(zé)監(jiān)聽serversocket,accept新連接,并將建立的socket分派給subReactor<>subReactor負(fù)

5、責(zé)多路分離已連接的socket,讀寫網(wǎng)絡(luò)數(shù)據(jù),對業(yè)務(wù)處理功能,其扔給worker線程池完成。通常,subReactor個數(shù)上可與CPU個數(shù)等同。clientmainsubReactorclientsendreadsendreadclientsendreadfhreadPooldecoddecodacceptoromputle(encodompute(encodworkerthreaddecodencodqueuedtasks說完Rcacotr模型的三種形式,那么Netty是哪種呢?其實,我述有一?種Reactor模型的變種沒說,那就是去掉線程池的第三種

6、形式的變種,這也是NettyN10的默認(rèn)模式。在實現(xiàn)上,Netty中的Boss類充當(dāng)mainReactor,NioWorker類充當(dāng)subReactor(默認(rèn)NioWorker的個數(shù)是Runtime.getRuntime().availableProcessors())。在處理新來的請求時,NioWorker讀完已收到的數(shù)據(jù)到ChannelBuffcr中,之后觸發(fā)ChannelPipeline中的ChannelHandler流。Netty是事件駆動的,可以通過ChannelHandler鏈來控制執(zhí)行流向。因為ChannelHandler鏈的執(zhí)行過程是在

7、subReactor中同步的,所以如果業(yè)務(wù)處理handler耗時長,將嚴(yán)重影響口J支持的并發(fā)數(shù)。這種模型適合于像Memcache這樣的應(yīng)用場景,但對需要操作數(shù)據(jù)庫或者和其他模塊阻塞交互的系統(tǒng)就不是很合適。Netty的可擴展性非常好,而像ChannelHandler線程池化的需要,可以通過在ChannelPipeline中添加Netty內(nèi)置的ChannelHandler實現(xiàn)類-ExecutionHandler實現(xiàn),對使用者來說只是添加一行代碼而已。對于ExecutionHandler需要的線程池模型,Netty提供了兩種口J選:1)MemoryAware

8、ThreadPoolExecutor口J控制Executor中待處理任務(wù)的上限(超過上限時,后

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。