Apache Mina開發手冊之三
來源:程序員人生 發布時間:2014-10-04 08:00:01 閱讀次數:4048次
Apache Mina開發手冊之三
作者:chszs,轉載需注明。博客主頁:http://blog.csdn.net/chszs
2、Mina服務器的架構
Mina服務器的架構圖如下所示:

1)IOAcceptor即I/O接收器,負責監聽網絡連接和發過來的數據包。
2)對于任一新連接,會創建一個新會話,隨后所有從該IP地址:端口發送過來的請求都會由該會話進行處理。
3)會話接收到的所有包,都會通過整個過濾器鏈的處理。過濾器可用于修改包的內容(比如轉換對象,添加/刪除信息等),把原始的字節轉換成高級對象,反之亦然,以及包編解碼器PacketEncoder和PacketDecoder等都是相當有用的。
4)最后包通過IOHandler句柄處理或轉換,以滿足業務的需求。
3、基于Mina的客戶端架構
Mina客戶端需要連接到服務器,發送消息并處理響應,它的架構圖如下所示:

1)客戶端首先創建IOConnector連接器(Mina為Socket連接構建的),啟動時與服務器綁定。
2)一旦連接建立,會創建會話,并與連接相關聯。
3)應用程序或客戶端向會話寫入數據,使得數據被發送到服務器,而后通過過濾器鏈。
4)從服務器收到的響應或消息也會遍歷整個過濾器鏈,到達IOHandler句柄,進行處理。
六、創建Mina客戶端
下面我們編寫一個求和運算的客戶端為例。
可見,要構建Mina客戶端,我們需要完成以下步驟:
1)創建連接器
2)創建過濾器鏈
3)創建IOHandler句柄,并添加到連接器
4)綁定到服務器
下面詳細說明。
1、創建連接器
NioSocketConnector connector = new NioSocketConnector();
2、創建過濾器鏈
if(USE_CUSTOM_CODEC){
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new SumUpProtocolCodecFactory(false)));
} else{
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
}
3、創建IOHandler句柄
connector.setHandler(new ClientSessionHandler(values));
4、綁定到服務器
IoSession session;
for (;;) {
try {
ConnectFuture future = connector.connect(new InetSocketAddress(HOSTNAME, PORT));
future.awaitUninterruptibly();
session = future.getSession();
break;
} catch (RuntimeIoException e) {
System.err.println("Failed to connect.");
e.printStackTrace();
Thread.sleep(5000);
}
}
我們連接到服務器,由于連接是異步任務,故我們使用ConnectFuture類,它可以知道連接什么時候完成。一旦連接完成了,我們就可以獲得相關的IoSession會話。
要發送消息到服務器,我們必須向會話寫入消息數據。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈