Mina是什么

        
Mina是叁个基于NIO的互连网框架,使用它编写程序时,能够小心于业务处理,而不用过于关心IO操作。不论应用程序选取什么协议(TCP、UDP)或然此外的,Mina提供了一套公用的接口,来协理那些协议。近来得以处理的协议有:HTTP,
XML, TCP, LDAP, DHCP, NTP, DNS, XMPP, SSH,
FTP… 。从这点来说,Mina不仅仅是一个基于NIO的框架,更是二个网络层协议的兑现。

  

MINA 设计架构

  

一 、Mina 全体架构

 图片 1

支出顺序时,只需求在米纳的根底上,使用Mina的API就足以了。

 

二 、Mina种种零部件

 

在采取Mina时,能够在Server端使用,也得以在Client端使用。并且它们都施用了扳平的架构。

 图片 2

 

地点这些图表达了Mina的处理差不离流程。从那几个图上也得以看到,差不离包涵了二个部分:

·IoService:执行实际的IO操作。

·IoFilter Chain:将数据开始展览过滤只怕转移为愿意的数据结构,反之亦然。

·IoHandler:实际的政工操作。

  

因此一旦想要使用Mina编写程序,只供给下列3步即可:

·创建IoService。

·添加IoFilter到FilterChain

·编写处理业务逻辑的IoHandler

  

3、server端示例

 定义一个IOHandler:

package com.fjn.frame.mina.timetest;

import java.util.Date;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class TimeServerHandler extends IoHandlerAdapter {
    @Override
    public void exceptionCaught(IoSession session, Throwable cause)
            throws Exception {
        cause.printStackTrace();
    }

    @SuppressWarnings("deprecation")
    @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));
    }
}

 

接下去正是选拔Mina了: 

package com.fjn.frame.mina.timetest;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
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 {
        // 创建IoService
        IoAcceptor acceptor = new NioSocketAcceptor();
        // 添加Filter:
        acceptor.getFilterChain().addLast("logger", new LoggingFilter());
        acceptor.getFilterChain().addLast(
                "codec",
                new ProtocolCodecFilter(new TextLineCodecFactory(Charset
                        .forName("UTF-8"))));
        // 设置Handler
        acceptor.setHandler(new TimeServerHandler());
        // 其它配置
        acceptor.getSessionConfig().setReadBufferSize(2048);
        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

        // 启动服务
        acceptor.bind(new InetSocketAddress(PORT));
    }
}

 

运作方面程序后,能够在cmd(或然应用极限)上使用下边发号施令测试。

telnet 127.0.0.1 9123

  

4、IoService说明

        
编写互连网程序,一般都分为Server/Clinet。Mina为Server端程序提供的IoService完结是IoAcceptor,为客户端提供的贯彻是IoConnector。

Server端实现:

 图片 3

 

Clint端实现:

 图片 4

 

  

5、IoSession说明

Session,那一个词都不生疏。在Web开发中有Session的定义,在Hibernate中有Session的定义。Session正是对接二连三会话的包裹,存款和储蓄一些情景新闻。同样在Mina中也有Session的定义。

在Mina会为每三个三番五次成立session,并蕴藏在内部存款和储蓄器中,直到与Client之直接连断开。

UDP商谈是无连接的,那样树立呢?在Java
NIO的API中有DatagramChannel、SocketChannel。所以Mina的NioSession中,就将打包了Channel。

 

 

6、IoFilter说明

 

过滤器的效益,以及它的运维规律,开发过Web应用程序的人应当都以清楚的。IoFilter的规律与Web应用中的Filter是平等的,这里就不在赘述。

 如若不清楚Filter的原理,可以参考那里

选拔过滤器能够做什么样事情呢?

一 、  日志记录

贰 、  依照协议对数码举办编码、解码。

3、  SSL处理

等等。

 

地点示例中的TextLine协议过滤器,正是将用户请求数据解码成一行一行的数据。

 

最近已有过滤器有:

 图片 5

 

自然了,也可自定义Filter了。

 

 

7、IoHandler说明

 

IoHandler是在结尾贰个Filter中调用的。首要完结的方式是messageReceived。

固然写你收到到数量后要处理的事情逻辑。例如示例

 

相关文章

网站地图xml地图