MINA 基本应用框架 html
如上图所示,mina 封装了底层数据传输交互的细节,咱们在mina之上便不须要考虑网络层的具体实现。java
下图为MINA 各组件的功能apache
广义的说MINA 应用分为3层 :网络
因此建立一个Mina 应用咱们必需要作的是 : session
下面看一个官方给的简单的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