[一]Mina入门实例-Mina网络通信框架

一、Mina基本介绍

MINA(Multipurpose Infrastructure for NetworkApplications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。Mina与后来兴起的高性能IO新贵Netty一样,都是韩国人Trustin Lee的大作,二者的设计理念是极为相似的。在作为一个强大的开发工具的同时,这两个框架的优雅设计和不俗的表现,有很多地方是值得学习和借鉴的。本文将从Mina工作原理的角度出发,对其结构进行分析。

Mina与应用

[一]Mina入门实例-Mina网络通信框架_第1张图片

从这个图里面可以了解到,MINA是应用(作为一个客户端或服务器)和网络层之间的粘合剂,网络层可以是基于TCP、UDP、VM内部通讯或类似RS-232的串行通讯协议。
这样开发人员仅需要基于MINA设计应用而不需要处理网络层的所有复杂性。

Mina内部结构

[一]Mina入门实例-Mina网络通信框架_第2张图片

总的来说,基于MINA的应用被分为3层:

  1. I/O服务(I/O Service):进行实际的I/O操作;
  2. I/O过滤器链(I/O Filter Chain):过滤/转换字节为所需的数据结构,及将数据结构转换为字节;
  3. I/O 处理器(I/O Handler):在这里实现实际的业务逻辑。

所以,为了创建一个基于MINA的应用,你需要:

  1. 创建一个I/O服务:选择一个已经可用的服务(*Acceptor)或创建一个你自己的;
  2. 创建一个过滤器链:选择一个已存在的过滤器或创建一个自定义的过滤器来转换请求及响应;
  3. 创建一个I/O处理器:编写业务逻辑,处理不同的消息。

二、Mina入门实例

Server服务端实例

基本步骤:

  • 第一步 : 编写IoService
  • 第二步 : 编写过滤器
  • 第三步 : 编写 IoHandler

代码:
MinaServer 代码:

public class MinaServer {
    private static SocketAcceptor acceptor;

    public static void main(String[] args) {
        try {
        // 第一步 : 编写IoService:创建服务器端监听
        acceptor = new NioSocketAcceptor();
        // 第二步 : 编写过滤器:添加编码过滤
        acceptor.getFilterChain().addLast("codec",
                new ProtocolCodecFilter(new TextLineCodecFactory(
                        Charset.forName("utf-8"), 
                        LineDelimiter.WINDOWS.getValue(), LineDelimiter.WINDOWS.getValue())));
        //  1)设置缓存大小
        acceptor.getSessionConfig().setReadBufferSize( 2048 );
        //  2)设置回话空闲时间
        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );        
        //第三步 : 编写 IoHandler
        acceptor.setHandler(new ServerHandler());
        //绑定7080端口号
        acceptor.bind(new InetSocketAddress(7080));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

Handler:ServerHandler代码:

public class ServerHandler extends IoHandlerAdapter{
    private final static Logger log = LoggerFactory
            .getLogger(IoHandlerAdapter.class);

    @Override
    public void messageReceived(IoSession session, Object message)
            throws Exception {
        System.out.println("接收消息处理:messageReceived");
    }

}

Client客户端实例

附:Mina开发jar包(镜像地址)下载地址:

http://www.apache.org/dyn/closer.lua/mina/mina/2.0.16/apache-mina-2.0.16-bin.zip

0000000000000000000000000000000000000000000000000000

参考文章:

  1. http://blog.csdn.net/u010031673/article/details/51063010
  2. http://mina.apache.org/mina-project/userguide/ch2-basics/application-architecture.html
  3. http://www.iteye.com/topic/166596

你可能感兴趣的:(提高篇)