Apache Mina開發手冊

jopen 10年前發布 | 23K 次閱讀 網絡工具包 Apache MINA

作者:chszs,轉載需注明。博客主頁:http://blog.csdn.net/chszs

一、介紹

Apache Mina是一個網絡應用框架,簡化用戶開發高性能、高可擴展性的網絡應用程序的難度。Mina提供了一個抽象的事件驅動的異步API,通過Java NIO實現各種傳輸協議如TCP/IP和UDP/IP。

 

Apache Mina經常用作:

1)NIO框架庫

2)客戶端/服務器通信框架庫

3)網絡Socket通信庫

 

Apache Mina還伴隨有不少子項目:

1)Asyncweb

構建于Apache Mina異步框架之上的HTTP服務器

2)FtpServer

一個FTP服務器

3)SSHd

一個Java庫,支持SSHH協議

4)Vysper

一個XMPP服務器

 

二、Apache Mina下載

下載最新的Mina v2.0.8版

地址見:http://mina.apache.org/mina-project/downloads.html

 

三、用Mina開發時間服務器

說明一下,其實是基于官方的例子,略作了修改,因為發現官方的例子太陳舊,甚至包含了deprecated的方法。

 

1、先決條件

Apache Mina 2.0.8 Core

JDK 7

SLF4J+LOGBACK

 

2、項目依賴包

mina-core-2.0.8.jar

slf4j-api-1.6.6.jar

20140924172015724.jpg

 

3、編寫基于Mina的Time服務器

    package ch.chiqms.server;  

    import java.io.IOException;  
    import java.net.InetSocketAddress;  
    import java.nio.charset.Charset;  

    importorg.apache.mina.core.service.IoAcceptor;  
    importorg.apache.mina.core.session.IdleStatus;  
    importorg.apache.mina.filter.codec.ProtocolCodecFilter;  
    importorg.apache.mina.filter.codec.textline.TextLineCodecFactory;  
    importorg.apache.mina.filter.logging.LoggingFilter;  
    import org.apache.mina.transport.socket.nio.NioSocketAcceptor;  

    public class MinaTimeServer {  
             privatestatic final int PORT = 9123;  
             publicstatic void main(String[] args){  
                       //監聽連接的對象  
                       IoAcceptoracceptor = new NioSocketAcceptor();  

                       //配置過濾器  
                       //logger過濾器會輸出所有的信息,例如新創建的會話、消息的接收、消息的發送、會話的關閉  
                       //codec過濾器會轉換二進制活協議規定的數據為消息對象,這里是處理基于文本的消息  
                       acceptor.getFilterChain().addLast("logger",new LoggingFilter());  
                       acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(  
                                         newTextLineCodecFactory(Charset.forName("UTF-8"))));  

                       //  
                       acceptor.setHandler(newTimeServerHandler());  

                       //設置輸入緩沖區的大小和會話的IDLE熟悉  
                       acceptor.getSessionConfig().setReadBufferSize(2048);  
                       acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);  

                       try{  
                                acceptor.bind(newInetSocketAddress(PORT));  
                       }catch (IOException e) {  
                                e.printStackTrace();  
                       }  
             }  
    }  

4、編寫Time服務的Handler
 
    package ch.chiqms.server;  

    import java.text.SimpleDateFormat;  
    import java.util.Calendar;  

    import org.apache.mina.core.service.IoHandlerAdapter;  
    importorg.apache.mina.core.session.IdleStatus;  
    importorg.apache.mina.core.session.IoSession;  

    public class TimeServerHandler extendsIoHandlerAdapter {  

             @Override  
             publicvoid exceptionCaught(IoSession session, Throwable cause)  
                                throwsException {  
                       cause.printStackTrace();  
             }  

             @Override  
             publicvoid messageReceived(IoSession session, Object message) throws Exception {  
                       Stringstr = message.toString();  
                       if(str.trim().equalsIgnoreCase("quit")){  
                                session.close(true);  
                                return;  
                       }  
                       Calendartime = Calendar.getInstance();  
                       SimpleDateFormatdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
                       session.write(df.format(time.getTime()));  
                       System.out.println("TimeMessage written...");  
             }  

             @Override  
             publicvoid sessionIdle(IoSession session, IdleStatus status) throws Exception {  
                       System.out.println("IDLE"+session.getIdleCount(status));  
             }  

    }  

5、運行MinaTimeServer

在命令行輸入telnet 127.0.0.1 9123

20140924171923937.jpg

 

服務器端的輸出也可以看到:

  1. SLF4J: Failed to load class"org.slf4j.impl.StaticLoggerBinder".  
  2. SLF4J: Defaulting to no-operation (NOP)logger implementation  
  3. SLF4J: Seehttp://www.slf4j.org/codes.html#StaticLoggerBinder for further details.  
  4. Time Message written...  
  5. Time Message written...  
  6. Time Message written... 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!