溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Netty的異步通知機(jī)制

發(fā)布時(shí)間:2021-08-16 11:19:55 來源:億速云 閱讀:196 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Netty的異步通知機(jī)制”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

前言

前面的文章分析了Channel實(shí)例化、初始化、注冊(cè)機(jī)制,本文分析下異步結(jié)果的通知,也就是回調(diào),同時(shí)梳理下Future、Promise、ChannelFuture、ChannelPromise的關(guān)系。

一、異步通知代碼走查

 

在Channel注冊(cè)到Selector后,會(huì)返回ChannelFuture。如果注冊(cè)未完成,會(huì)通過增加Listener來進(jìn)行異步通知注冊(cè)結(jié)果,接下來看下是如何回調(diào)的。


代碼塊

Netty的異步通知機(jī)制

備注:上面代碼塊中在注冊(cè)完Channel后返回ChannelFuture,在ChannelFuture注冊(cè)了ChannelFutureListener,通過異步通知的方式獲取注冊(cè)結(jié)果。


代碼塊 

Netty的異步通知機(jī)制

備注:構(gòu)建DefaultChannelPromise綁定了EventLoop和Channel,上面注冊(cè)的ChannelFutureListener實(shí)際注冊(cè)到了DefaultChannelPromise。


代碼塊

Netty的異步通知機(jī)制

備注:通過ChannelPromise標(biāo)記Channel注冊(cè)成功。


代碼塊

Netty的異步通知機(jī)制

備注:在DefaultPromise中通過cas設(shè)置Channel注冊(cè)結(jié)果,并回調(diào)加在其身上的Listener。


Netty的異步通知機(jī)制

Netty的異步通知機(jī)制

備注:將注冊(cè)的所有Listener,通過回調(diào)GenericFutureListener的operationComplete方法,完成結(jié)果的通知。



二、異步通知流程圖


下面以channel注冊(cè)為例,勾勒異步回調(diào)流程圖。Future/Promise作為結(jié)果載體與執(zhí)行Listener的執(zhí)行主體。


Netty的異步通知機(jī)制


三、Future/Promise關(guān)系圖譜


以下類圖中展現(xiàn)了Future/Promise的類圖結(jié)構(gòu),Netty中Future繼承Java中的Future并`增加了基于Listener的異步通知機(jī)制`。

Promise允許在標(biāo)志某個(gè)操作結(jié)果后再回調(diào)Listener(比如:在注冊(cè)成功后調(diào)用Promise#trySuccess將成功結(jié)果在Promise中標(biāo)記,并回調(diào)Listener)。

ChannelFuture與特定的Channel綁定,ChannelPromise繼承ChannelFuture與Promise即擁有綁定特定Channel與標(biāo)記操作結(jié)果回調(diào)Listener的能力。 


Netty的異步通知機(jī)制

“Netty的異步通知機(jī)制”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI