mina 基礎二

    MINA 基本應用框架 html

      

    

    如上圖所示,mina 封裝了底層數據傳輸交互的細節,咱們在mina之上便不須要考慮網絡層的具體實現。java

    下圖爲MINA 各組件的功能apache

 

   

   廣義的說MINA 應用分爲3層 :網絡

  •  I/O Service  執行實際的I/O 操做
  •  I/O Filter Chain ( Filters/Transforms bytes into desired Data Structures and vice-versa) 執行雙向的過濾,將數據轉換爲所需的數據類型
  •  I/O Handler  處理業務邏輯

   因此建立一個Mina 應用咱們必需要作的是 : session

  1. 建立一個I/O service   能夠從mina 提供的service( *Acceptor)中選取,或者本身建立
  2. 建立Filter Chain   Choose from already existing Filters or create a custom Filter for transforming request/response
  3. 建立I/O Handler 

      下面看一個官方給的簡單的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

相關文章
相關標籤/搜索