如何搭建高性能Java网络框架 MINA
source link: https://www.linuxprobe.com/java-mina-network.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Apache MINA 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。它通过Java NIO提供了一个抽象的、事件驱动的、异步的位于各种传输协议(如TCP/IP和UDP/IP)之上的API,
Apache MINA 通常可被称之为:
NIO 框架库;
客户端/服务器框架库;
或者一个网络socket库。
然而,它所提供的功能远不止这些。
(以上内容大致翻译自Apache MINA网站)
如官方文档的介绍,Apache MINA 是一个网络应用程序框架,它对Java中的socket和NIO进行了有效和清晰的封装,方便开发人员开发TCP/UDP程序,从而抛开在使用原始的socket时需要考虑的各种繁杂而又烦人问题(线程、性能、会话等),把更多精力专著在应用中的业务逻辑的开发上。
Apache MINA 有两个主要版本:2.0 和 1.1,2.0与1.1有较大的区别,其采用java NIO进行开发,使得性能得到有效的提升,在接口方面也有不小的变化,具体信息可以参见其网站说明。
下面的介绍以 Apache MINA 2.0 为例。
要编写和运行一个基于Apache MINA 2.0的程序,需要JDK 5.0以上版本,还需要以下软件:
(1)MINA 2.x Core
下载地址:http://mina.apache.org/downloads.html
(2)SLF4J 1.3.0 or greater
下载地址:http://www.slf4j.org/download.html
这里需要用到两个 SLF4J 的jar包:slf4j-api.jar 和 slf4j-jdk14.jar。
分别解压下载的MINA 2.x Core 和SLF4J文件,找出下列jar包文件:
mina-core-2.0.0-M1.jar
slf4j-api.jar
slf4j-jdk14.jar
该程序的功能非常简单,就是当客户端连接到服务器的9123端口后,程序将服务器当前的时间信息以字符串的形式发送给客户端。
我们可以用Eclipse来创建编写这个程序。
(1)在Eclipse中创建一个Java项目,例如 TimeServerProject,然后将mina-core-2.0.0-M1.jar、slf4j-api.jar 和 slf4j-jdk14.jar这三个文件添加到项目的Libraries中。
(2)创建一个 MinaTimeServer 类,其内容为:
import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.common.IdleStatus; import org.apache.mina.common.IoAcceptor; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class MinaTimeServer { private static final int PORT = 9123; public static void main(String[] args) throws IOException { IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.getFilterChain().addLast("logger", new LoggingFilter()); acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset .forName("UTF-8")))); acceptor.setHandler(new TimeServerHandler()); acceptor.getSessionConfig().setReadBufferSize(2048); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); acceptor.bind(new InetSocketAddress(PORT)); } } (3)创建一个 TimeServerHandler 类,其内容为: import java.util.Date; import org.apache.mina.common.IdleStatus; import org.apache.mina.common.IoHandlerAdapter; import org.apache.mina.common.IoSession; 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(); System.out.println("Message read:"); System.out.println(str); Date date = new Date(); session.write(date.toString()); System.out.println("Message written..."); session.close(); } @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { System.out.println("IDLE " + session.getIdleCount(status)); } }
(4)编译并运行MinaTimeServer类
(5)打开您的浏览器,在地址栏中输入 http://127.0.0.1:9123/,然后回车,你就可以看到服务器的时间显示在您的浏览器内了。同时您也可以在运行MinaTimeServer的控制台窗口中看到类似下面的信息:
Message read:2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log 信息: CREATED 2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log 信息: OPENED 2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log 信息: RECEIVED: HeapBuffer[pos=0 lim=261 cap=2048: 47 45 54 20 2F 20 48 54 54 50 2F 31 2E 31 0D 0A...] GET / HTTP/1.1 Message written... Message read: Accept: */* Message written... Message read: Accept-Language: zh-cn,en-US;q=0.5 Message written... Message read: UA-CPU: x86 Message written... Message read: Accept-Encoding: gzip, deflate Message written... Message read: User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727) Message written... Message read: Host: 127.0.0.1:9123 Message written... Message read: Connection: Keep-Alive Message written... Message read: Message written... 2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log 信息: SENT: HeapBuffer[pos=0 lim=29 cap=30: 46 72 69 20 41 70 72 20 31 31 20 31 32 3A 32 32...] 2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log 信息: SENT: HeapBuffer[pos=0 lim=0 cap=0: empty] 2008-4-11 12:22:44 org.apache.mina.filter.logging.LogLevel$4 log 信息: CLOSED
这是程序的日志信息以及,浏览器发送过来请求的HTTP头信息。
(6)或者也可以通过telnet连接服务器的9123端口,连敲两次回车,就可以看到服务器发送过来的时间信息了。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK