小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

MINA 的基礎(chǔ)架構(gòu)_Life&Work

 GuolinLee 2008-08-15

MINA 的基礎(chǔ)架構(gòu)

下圖是 MINA 的架構(gòu)圖,


圖 1:MINA 的架構(gòu)圖

在 圖中的模塊鏈中,IoService 便是應(yīng)用程序的入口,相當(dāng)于我們前面代碼中的 IoAcceptor,IoAcceptor 便是 IoService 的一個(gè)擴(kuò)展接口。IoService 接口可以用來添加多個(gè) IoFilter,這些 IoFilter 符合責(zé)任鏈模式并由 IoProcessor 線程負(fù)責(zé)調(diào)用。而 IoAcceptor在 ioService 接口的基礎(chǔ)上還提供綁定某個(gè)通訊端口以及取消綁定的接口。在上面的例子中,我們是這樣使用 IoAcceptor的:

IoAcceptor acceptor = new SocketAcceptor();

相當(dāng)于我們使用了 Socket 通訊方式作為服務(wù)的接入,當(dāng)前版本的 MINA 還提供了除 SocketAccepter 外的基于數(shù)據(jù)報(bào)文通訊的 DatagramAccepter 以及基于管道通訊的 VmPipeAccepter。另外還包括串口通訊接入方式,目前基于串口通訊的接入方式已經(jīng)在最新測(cè)試版的 MINA 中提供。你也可以自行實(shí)現(xiàn) IoService 接口來使用自己的通訊方式。

而在上圖中最右端也就是 IoHandler,這便是業(yè)務(wù)處理模塊。相當(dāng)于前面例子中的 HelloHandler 類。在業(yè)務(wù)處理類中不需要去關(guān)心實(shí)際的通訊細(xì)節(jié),只管處理客戶端傳輸過來的信息即可。編寫 Handler 類就是使用 MINA 開發(fā)網(wǎng)絡(luò)應(yīng)用程序的重心所在,相當(dāng)于 MINA 已經(jīng)幫你處理了所有的通訊方面的細(xì)節(jié)問題。為了簡(jiǎn)化 Handler 類,MINA 提供了 IoHandlerAdapter 類,此類僅僅是實(shí)現(xiàn)了 IoHandler 接口,但并不做任何處理。

一個(gè) IoHandler 接口中具有如下一些方法(摘自 MINA 的 API 文檔):

void exceptionCaught(IoSession session, Throwable cause)
當(dāng)接口中其他方法拋出異常未被捕獲時(shí)觸發(fā)此方法
void messageReceived(IoSession session, Object message)
當(dāng)接收到客戶端的請(qǐng)求信息后觸發(fā)此方法.
void messageSent(IoSession session, Object message)
當(dāng)信息已經(jīng)傳送給客戶端后觸發(fā)此方法.
void sessionClosed(IoSession session)
當(dāng)連接被關(guān)閉時(shí)觸發(fā),例如客戶端程序意外退出等等.
void sessionCreated(IoSession session)
當(dāng)一個(gè)新客戶端連接后觸發(fā)此方法.
void sessionIdle(IoSession session, IdleStatus status)
當(dāng)連接空閑時(shí)觸發(fā)此方法.
void sessionOpened(IoSession session)
當(dāng)連接后打開時(shí)觸發(fā)此方法,一般此方法與 sessionCreated 會(huì)被同時(shí)觸發(fā)

前面我們提到 IoService 是負(fù)責(zé)底層通訊接入,而 IoHandler 是負(fù)責(zé)業(yè)務(wù)處理的。那么 MINA 架構(gòu)圖中的 IoFilter 作何用途呢?答案是你想作何用途都可以。但是有一個(gè)用途卻是必須的,那就是作為 IoService 和 IoHandler 之間的橋梁。IoHandler 接口中最重要的一個(gè)方法是 messageReceived,這個(gè)方法的第二個(gè)參數(shù)是一個(gè) Object 型的消息,總所周知,Object 是所有 Java 對(duì)象的基礎(chǔ),那到底誰來決定這個(gè)消息到底是什么類型呢?答案也就在這個(gè) IoFilter 中。在前面使用的例子中,我們添加了一個(gè) IoFilter 是 new ProtocolCodecFilter(new TextLineCodecFactory()),這個(gè)過濾器的作用是將來自客戶端輸入的信息轉(zhuǎn)換成一行行的文本后傳遞給 IoHandler,因此我們可以在 messageReceived 中直接將 msg 對(duì)象強(qiáng)制轉(zhuǎn)換成 String 對(duì)象。

而 如果我們不提供任何過濾器的話,那么在 messageReceived 方法中的第二個(gè)參數(shù)類型就是一個(gè) byte 的緩沖區(qū),對(duì)應(yīng)的類是 org.apache.mina.common.ByteBuffer。雖然你也可以將解析客戶端信息放在 IoHandler 中來做,但這并不是推薦的做法,使原來清晰的模型又模糊起來,變得 IoHandler 不只是業(yè)務(wù)處理,還得充當(dāng)協(xié)議解析的任務(wù)。

MINA自身帶有一些常用的過濾器,例如LoggingFilter(日志記錄)、BlackListFilter(黑名單過濾)、CompressionFilter(壓縮)、SSLFilter(SSL加密)等。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多