**
不堪回首:@junotes
filters
iofilter 是mina框架中乙個核心的部分,如下圖,對間於ioservice和iohandle之間,用於過濾所有的i/o事件和請求,其扮演的角色就像j2ee中的servlet。
mina提供不少現成的過濾器:
1、loggingfilter :日誌過濾器,用於記錄所有的事件和請求日誌.
2、protocolcodecfilter:規約解析過濾器,用來將所有收到的bytebuffer內容轉換為pojo訊息(物件),實現往來報文的編碼和解碼;
3、compressionfilter:壓縮過濾器;
4、sslfilter …
protocolcodecfilter
相對比較常用的是protocolcodecfilter,下面主要介紹一下protocolcodecfilter的使用:
還是以官方幫助文件中例子來說明(
這是乙個伺服器程式,請求的下行報文格式:
width: 請求的寬度
height: 請求的高度
numchars: 生成的位元組個數
服務端返回兩張:
length1: 1的大小
image1: 1(png格式)
length2: 2的大小
image2: 2(png格式)
現在如果想通過mina框架來實現基於這一簡單規約的編譯碼通訊功能,應該如何做呢?
public
class imageserver
13: }這裡先來看和filter有關的部分:
acceptor.getfilterchain().addlast("protocol", new protocolcodecfilter(new imagecodecfactory(false)));
在acceptor的filter鏈中加入我們自己的過濾器,乙個protocolcodecfilter的實現,這裡的imagecodecfactory又是什麼呢?public
class imagecodecfactory implements protocolcodecfactory else
13: }
14:
15:public protocolencoder getencoder(iosession iosession) throws exception
18:
19:public protocoldecoder getdecoder(iosession iosession) throws exception
22: }
imagecodecfactory是對介面protocolcodecfactory 的實現,是用來構建filter的。protocolcodecfactory 介面只有兩個方法:public
inte***ce protocolcodecfactory
7:沒錯,這個規約編譯碼工廠需要裝配乙個編碼器(encoder)和乙個解碼器(decoder):
編碼器:
public
class imagerequestencoder implements protocolencoder
12:
13:public
void dispose(iosession session) throws exception
16: }解碼器:
public
class imagerequestdecoder extends cumulativeprotocoldecoder else
14: }
15: }這裡解碼器不是直接從protocoldecoder繼承的,為什麼呢?因為實際中接受的乙個資料報並不能保證包含完整的一幀報文,就是所謂的斷幀的情況,如果用cumulativeprotocoldecoder,就不需要自己處理這種情況了,mina框架會將未解碼的資料保留,等下一包資料到來後繼續嘗試解碼;
這裡編碼器的encode和解碼器的dodecode方法就是實際用來進行應用層規約編譯碼的;其中imageresuest是下行請求規約對應pojo.
整個類的協助關係如下圖所示:
filter過濾器處理完後,就交給handler,做進一步業務處理;
response部分的就不多羅嗦了,可以看這裡
至此對mina框架用過的一些東西,從使用指南的角度做了一些總結,還有很多方面還沒有用過,先留乙個坑,等來日填補吧。mina框架最吸引我的是這種設計思想,將通訊、規約解析、業務處理分離得恰到好處,既不影響效能又方便擴充套件和替換。下一步希望從源**的角度,學習一下其內部的實現思想。
MINA 框架簡介
1。mina 框架簡介 2。iosession session可以理解為伺服器與客戶端的特定連線,該連線由伺服器位址 埠以及客戶端位址 埠來決定。客戶端發起請求時,指定伺服器位址和埠,客戶端也會指定或者根據網路路由資訊自動指定乙個位址 自動分配乙個埠。這個位址 埠對構成乙個session。sessi...
MINA 框架之IoService學習
在mina框架結構中我們知道,ioservice是mina應用程式的其中一層。它為server和client提供所有的io 服務。它處理你的應用程式和遠端對端的所有互動。其本身是乙個介面,在server端的實現為ioacceptor 在client端的實現為ioconnector 先來看看它的min...
Mina框架資料傳送流程
mina框架經常用,但是具體的細節還是摸不清楚。稍稍深入了一下 看了一下資料流程,在此做一些記錄。先看一下大致的流程。詳細的說明網上很多,比如官方 部分層的細節也沒有深究。主要看了一下iofilter 資料報傳送流程 session.write 這個函式應該是filter之前的業務。eclipse單...