Apache MINA 快速入门

1。介绍

ApacheMINA是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。它通过JavaNIO提供了一个抽象的、事件驱动的、异步的位于各种传输协议(如TCP/IP和UDP/IP)之上的API,

ApacheMINA通常可被称之为:

NIO框架库;

客户端/服务器框架库;

或者一个网络socket库。

然而,它所提供的功能远不止这些。

(以上内容大致翻译自ApacheMINA网站)

如期官方文档的介绍,ApacheMINA是一个网络应用程序框架,它对Java中的socket和NIO进行了有效和清晰的封装,方便开发人员开发TCP/UDP程序,从而抛开在使用原始的socket时需要考虑的各种繁杂而又烦人问题(线程、性能、会话等),把更多精力专著在应用中的业务逻辑的开发上。

ApacheMINA有两个主要版本:2.0和1.1,2.0与1.1有较大的区别,其采用javaNIO进行开发,使得性能得到有效的提升,在接口方面也有不小的变化,具体信息可以参见其网站说明。

下面的介绍以ApacheMINA2.0为例。

2。软件准备

要编写和运行一个基于ApacheMINA2.0的程序,需要JDK5.0以上版本,还需要以下软件:

(1)MINA2.xCore

下载地址:http://mina.apache.org/downloads.html

(2)SLF4J1.3.0orgreater

下载地址:http://www.slf4j.org/download.html

这里需要用到两个SLF4J的jar包:slf4j-api.jar和slf4j-jdk14.jar。

分别解压下载的MINA2.xCore和SLF4J文件,找出下列jar包文件:

mina-core-2.0.0-M1.jar

slf4j-api.jar

slf4j-jdk14.jar

3。编写一个ApacheMINA时间服务器

该程序的功能非常简单,就是当客户端连接到服务器的9123端口后,程序将服务器当前的时间信息以字符串的形式发送给客户端。

我们可以用Eclipse来创建编写这个程序。

(1)在Eclipse中创建一个Java项目,例如TimeServerProject,然后将mina-core-2.0.0-M1.jar、slf4j-api.jar和slf4j-jdk14.jar这三个文件添加到项目的Libraries中。

(2)创建一个MinaTimeServer类,其内容为:

importjava.io.IOException;

importjava.net.InetSocketAddress;

importjava.nio.charset.Charset;

importorg.apache.mina.common.IdleStatus;

importorg.apache.mina.common.IoAcceptor;

importorg.apache.mina.filter.codec.ProtocolCodecFilter;

importorg.apache.mina.filter.codec.textline.TextLineCodecFactory;

importorg.apache.mina.filter.logging.LoggingFilter;

importorg.apache.mina.transport.socket.nio.NioSocketAcceptor;

publicclassMinaTimeServer{

privatestaticfinalintPORT=9123;

publicstaticvoidmain(String[]args)throwsIOException{

IoAcceptoracceptor=newNioSocketAcceptor();

acceptor.getFilterChain().addLast("logger",newLoggingFilter());

acceptor.getFilterChain().addLast(

"codec",

newProtocolCodecFilter(newTextLineCodecFactory(Charset

.forName("UTF-8"))));

acceptor.setHandler(newTimeServerHandler());

acceptor.getSessionConfig().setReadBufferSize(2048);

acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);

acceptor.bind(newInetSocketAddress(PORT));

}

}

(3)创建一个TimeServerHandler类,其内容为:

importjava.util.Date;

importorg.apache.mina.common.IdleStatus;

importorg.apache.mina.common.IoHandlerAdapter;

importorg.apache.mina.common.IoSession;

publicclassTimeServerHandlerextendsIoHandlerAdapter{

@Override

publicvoidexceptionCaught(IoSessionsession,Throwablecause)

throwsException{

cause.printStackTrace();

}

@Override

publicvoidmessageReceived(IoSessionsession,Objectmessage)

throwsException{

Stringstr=message.toString();

System.out.println("Messageread:");

System.out.println(str);

Datedate=newDate();

session.write(date.toString());

System.out.println("Messagewritten...");

session.close();

}

@Override

publicvoidsessionIdle(IoSessionsession,IdleStatusstatus)

throwsException{

System.out.println("IDLE"+session.getIdleCount(status));

}

}

(4)编译并运行MinaTimeServer类

(5)打开您的浏览器,在地址栏中输入http://127.0.0.1:9123/,然后回车,你就可以看到服务器的时间显示在您的浏览器内了。同时您也可以在运行MinaTimeServer的控制台窗口中看到类似下面的信息:

Messageread:2008-4-1112:22:44org.apache.mina.filter.logging.LogLevel$4log

信息:CREATED

2008-4-1112:22:44org.apache.mina.filter.logging.LogLevel$4log

信息:OPENED

2008-4-1112:22:44org.apache.mina.filter.logging.LogLevel$4log

信息:RECEIVED:HeapBuffer[pos=0lim=261cap=2048:474554202F20485454502F312E310D0A...]

GET/HTTP/1.1

Messagewritten...

Messageread:

Accept:*/*

Messagewritten...

Messageread:

Accept-Language:zh-cn,en-US;q=0.5

Messagewritten...

Messageread:

UA-CPU:x86

Messagewritten...

Messageread:

Accept-Encoding:gzip,deflate

Messagewritten...

Messageread:

User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.2;.NETCLR1.1.4322;.NETCLR2.0.50727)

Messagewritten...

Messageread:

Host:127.0.0.1:9123

Messagewritten...

Messageread:

Connection:Keep-Alive

Messagewritten...

Messageread:

Messagewritten...

2008-4-1112:22:44org.apache.mina.filter.logging.LogLevel$4log

信息:SENT:HeapBuffer[pos=0lim=29cap=30:467269204170722031312031323A3232...]

2008-4-1112:22:44org.apache.mina.filter.logging.LogLevel$4log

信息:SENT:HeapBuffer[pos=0lim=0cap=0:empty]

2008-4-1112:22:44org.apache.mina.filter.logging.LogLevel$4log

信息:CLOSED

这是程序的日志信息以及,浏览器发送过来请求的HTTP头信息。

(6)或者也可以通过telnet连接服务器的9123端口,连敲两次回车,就可以看到服务器发送过来的时间信息了。

相关推荐