Apache Mina開發手冊

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

一、介紹

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



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



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

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


來自: http://blog.csdn.net/chszs/article/details/39525717

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