W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
我們已經(jīng)了解過了,為了能夠構(gòu)建 ChannelPipeline 的處理邏輯,可以將 ChannelHandler 實(shí)現(xiàn)串聯(lián)在一起。之前我們也解釋過了,支持有可能存在的復(fù)雜的分解處理成小的和可以重用的組件,其中的每一個定義良好的處理任務(wù)或步驟。本章將展示它簡化了測試。
Netty 的促進(jìn) ChannelHandler 的測試使用的是的所謂“嵌入式”傳輸。這是由一個特殊 Channel 實(shí)現(xiàn),EmbeddedChannel提供了一個簡單的方法通過管道傳遞事件。
這種想法很簡單:你把入站或者出站的數(shù)據(jù)寫入一個EmbeddedChannel 然后檢查是否能夠達(dá)到 ChannelPipeline 的結(jié)束。以此來確定消息編碼或解碼和 ChannelHandler 是否操作被觸發(fā)。
在表10.1中列出了相關(guān)方法。
名稱 | 職責(zé) |
---|---|
writeInbound | 寫一個入站消息到 EmbeddedChannel。 如果數(shù)據(jù)能從 EmbeddedChannel 通過 readInbound() 讀到,則返回 true |
readInbound | 從 EmbeddedChannel 讀到入站消息。任何返回遍歷整個ChannelPipeline。如果讀取還沒有準(zhǔn)備,則此方法返回 null |
writeOutbound | 寫一個出站消息到 EmbeddedChannel。 如果數(shù)據(jù)能從 EmbeddedChannel 通過 readOutbound() 讀到,則返回 true |
readOutbound | 從 EmbeddedChannel 讀到出站消息。任何返回遍歷整個ChannelPipeline。如果讀取還沒有準(zhǔn)備,則此方法返回 null |
Finish | 如果從入站或者出站中能讀到數(shù)據(jù),標(biāo)記 EmbeddedChannel 完成并且返回。這同時(shí)會調(diào)用 EmbeddedChannel 的關(guān)閉方法 |
測試入站和出站數(shù)據(jù)
處理入站數(shù)據(jù)由 ChannelInboundHandler 處理并且表示數(shù)據(jù)從遠(yuǎn)端讀取。出站數(shù)據(jù)由 ChannelOutboundHandler 處理并且表示數(shù)據(jù)寫入遠(yuǎn)端。 根據(jù) ChannelHandler 測試你會選擇 writeInbound(),writeOutbound(), 或者兩者都有。
圖10.1顯示了數(shù)據(jù)流如何通過 ChannelPipeline 使用 EmbeddedChannel 的方法。
Figure 10.1 EmbeddedChannel data flow
如上圖所示,使用 writeOutbound() 寫消息到 Channel,消息在出站方法通過 ChannelPipeline,之后就可以使用 readOutbound() 讀取消息。著同樣使用與入站,使用 writeInbound() 和 readInbound()。處在
每種情況下,消息是通過 ChannelPipeline 并被有關(guān)ChannelInboundHandler 或 ChannelOutboundHandler 進(jìn)行處理。如果消息是不消耗您可以使用 readInbound() 或 readOutbound() 適當(dāng)?shù)淖x到 Channel 處理后的消息。
讓我們仔細(xì)看一下這兩個場景,看看他們?nèi)绾芜m用于測試您的應(yīng)用程序邏輯。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: