Mina 代码分析 1

Mina框架入门

      趁着最近比较闲,,花了几天时间粗略看了下Mina的源代码,把最近的心得写出来。一来,怕自己以后忘了。二来,也为跟我一样对Mina感兴趣的朋友们参考参考,免得少走弯路。


      首先,Mina是什么?能帮我们做什么?我研究一个新技术的时候,首先问的就是这样的问题。我个人的理解就是Mina是一个关注于通讯层的框架,任何需要底层通讯的应用,都可以使用它。更详细准确的介绍,请看官方网站http://mina.apache.org/


Mina的优势:

1. 用NIO实现,无需太多线程。可以处理的并发量更大。

2. 对于应用层来说,编程更方便。



好了废话少说,先看个Demo吧

public static void main(String[] args) throws IOException {
    // 创建Acceptor
    IoAcceptor acceptor = new NioSocketAcceptor();

    // 注册filter
   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在绑定的地址侦听
    acceptor.bind( new InetSocketAddress(PORT) );
}

 

 

IoHandler
public interface IoHandler {

     void sessionCreated(IoSession session) throws Exception;

     void sessionOpened(IoSession session) throws Exception;

     void sessionClosed(IoSession session) throws Exception;

     void sessionIdle(IoSession session, IdleStatus status) throws Exception;

     void exceptionCaught(IoSession session, Throwable cause) throws Exception;

     void messageReceived(IoSession session, Object message) throws Exception;

     void messageSent(IoSession session, Object message) throws Exception;
}
  

      首先new一个Acceptor,可以看出,Acceptor是我们要操作的服务器对象。然后,向Acceptor里注册了两个filter。filter的概念类似于web服务器里的filter。filter处于你的业务端代码和具体的发送数据代码之间,它负责过滤或者说处理传递过来的信息。业务处理代码,写在Handler里。


      代码结构相当的清晰。我们需要填写的业务代码就是 Handler 和 Filter了。它们俩很相似,但是在概念上是有区别的。filter事实上主要是处理底层的通信字节流,通信协议等,一般跟业务逻辑没什么关系。Handler是专门暴露给应用开发者,用来填写业务处理代码的。


看看下面的图便知道了

 


 

未完待续

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值