MINA 基本應用框架 html
如上圖所示,mina 封裝了底層數據傳輸交互的細節,咱們在mina之上便不須要考慮網絡層的具體實現。java
下圖爲MINA 各組件的功能apache
廣義的說MINA 應用分爲3層 :網絡
因此建立一個Mina 應用咱們必需要作的是 : session
下面看一個官方給的簡單的TCP Server列子 : Time server 位於 源碼包 中 apache-mina-2.0.9\src\mina-example\src\main\java\org\apache\mina\example\gettingstarted app
1.建立一個java 工程 框架
2.添加 mina-core 包 ,添加SLF4J 1.3.0 或更高版本 jdk 版本要求1.5 以上ide
2.建立類 MinaTimeServer ui
public class MinaTimeServer {
public static void main( String[] args ) throws IOException { IoAcceptor acceptor = new NioSocketAcceptor(); // 建立I/O service acceptor.getFilterChain().addLast( "logger", new LoggingFilter() ); // 添加過濾器 acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" )))); acceptor.setHandler( new TimeServerHandler() ); // 設置 I/O Handler acceptor.getSessionConfig().setReadBufferSize( 2048 ); acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 ); acceptor.bind( new InetSocketAddress(PORT) ); }
private static final int PORT = 9123;
}
業務邏輯處理類spa
public class TimeServerHandler extends IoHandlerAdapter { @Override public void exceptionCaught( IoSession session, Throwable cause ) throws Exception { cause.printStackTrace(); // 當連接發生異常的時候調用該方法 對於大多數應用程序只需打印異常信息就夠了 } @Override public void messageReceived( IoSession session, Object message ) throws Exception { String str = message.toString(); // 接受客戶端發來的數據 進行處理 if( str.trim().equalsIgnoreCase("quit") ) { session.close(); // 關閉鏈接 return; } Date date = new Date(); session.write( date.toString() ); System.out.println("Message written..."); } @Override public void sessionIdle( IoSession session, IdleStatus status ) throws Exception { System.out.println( "IDLE " + session.getIdleCount( status )); // 通道 空閒時調用 既超過指定的時間裏沒有讀寫操做的時候調用 } }
ip + 端口號 創建TCP連接 創建鏈接以後 隨便輸入 ,都會返回當前時間 ,輸入quit 關閉連接。
看起來很簡單嘛,終於有了一段代碼了,但是還有不少疑問啊!
譬如 如何選擇一個Acceptor ,應該添加什麼樣的FilterChain 呢?
Session 是啥?
IoHandlerAdaper 裏面的方法都是幹啥的?
趕忙看下章
文章參考 :
http://mina.apache.org/mina-project/userguide/ch2-basics/application-architecture.html
http://mina.apache.org/mina-project/userguide/ch2-basics/client-architecture.html
http://mina.apache.org/mina-project/userguide/ch2-basics/server-architecture.html