apache Mina自学

原创 2016年08月28日 22:19:32

MIna是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架,通过java NIO技术提供一些API供用户使用

一些重要的MIna接口

  • IoServiece :这个接口在一个线程上负责套接字的建立,拥有自己的 Selector,监听是否有连接被建立。
  • IoProcessor :这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的 Selector,这是与我们使用 JAVA NIO 编码时的一个不同之处,通常在 JAVA NIO 编码中,我们都是使用一个 Selector,也就是不区分 IoService与 IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在 IoService 上的过滤器,并在过滤器链之后调用 IoHandler。  
  • IoAccepter :相当于网络应用程序中的服务器端
  • IoConnector :相当于客户端
  • IoSession :当前客户端到服务器端的一个连接实例
  • IoHandler :这个接口负责编写业务逻辑,也就是接收、发送数据的地方。这也是实际开发过程中需要用户自己编写的部分代码。
  • IoFilter :过滤器用于悬接通讯层接口与业务层接口,这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的 encode与 decode是最为重要的、也是你在使用 Mina时最主要关注的地方。



直接进入代码

我们首先要建立一个监听传入连接的对象,所以使用SOcketAcceptor

import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

Ioacceptor acceptor = new NioSocketAcceptor();

之后,我们定义一个端口,并把SocketAcceptor绑定到这个端口上

private static final int PORT =3456;

acceptor.bind(new InetSocketAddress(PORT));

bind方法:绑定到远程端口并开始处理远程信息请求

接下来我们要配置一个过滤器,这个过滤器日志将会记录下所有我们要用的信息,接下来的过滤器是一个ProtocolCodecFilter,他的作用是把二进制信息和协议信息等等翻译成消息对象,反之亦然,我们使用一个已有的TextLine工厂,让他为你处理文本消息

acceptor.getFilterChain().addLast("logger",new LoggingFilter());

acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))) );

接下来我们定义一个处理器类,所谓处理器类,也就是实现IoHander接口的类,处理器类将用来服务所有用户的请求,

acceptor.setHandler( new TimeServerHandler()  );

现在对Acceptor中的属性进行添加,这将允许我们对socket进行特有的设置

acceptor.getSessionConfig().setReadBufferSize(2048);

acceptor.getSessionConfig().setIdleTime(IdleStatus.Both_IDLE,10);

这两个属性,一个是定义的Session的缓冲区大小,另外一个是定义的多长时间检查一次空闲的Session,当断线时进行重练

下面是处理器代码

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 ));
    }
}

  讲解用到的三个方法

1.exceptionCaught,重写后将对session关闭并把error简单的打印出来

2.messageReceived,定义从客户端接收到的数据,如果为单词quit则关闭回话.否则传回当前时间并打印,

3.sessionIdle,当session处于空闲并且程序执行到

acceptor.getSessionConfig().setIdleTime(IdleStatus.Both_IDLE,10);时,执行此方法

最后就是定义服务器将要监听的socket的地址,并进行启动服务

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) );
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

apache-mina-2.0.16

  • 2017年09月27日 22:55
  • 4.89MB
  • 下载

apache mina 框架实例

  • 2016年05月20日 10:53
  • 598KB
  • 下载

Apache MiNa 实现多人聊天室

开发环境: System:Windows JavaSDK:1.6 IDE:eclipse、MyEclipse 6.6 开发依赖库: Jdk1.4+、mina-core-2.0.4.j...

apache-mina源码

  • 2017年08月09日 10:30
  • 4.83MB
  • 下载

APACHE MINA jar 包

  • 2017年05月13日 09:52
  • 627KB
  • 下载

使用Apache MINA框架搭建服务端

MINA搭建服务端、MinaServer、MinaHandler

Apache MINA框架所用的jar包

  • 2016年08月12日 15:02
  • 1002KB
  • 下载

apache-mina2参考手册(中文)

  • 2017年02月28日 16:47
  • 1.24MB
  • 下载

[译]Apache MINA 2.0 第二章 基础知识

[译]Apache MINA 2.0 第二章 基础知识 只看楼主 发言 楼主 ヅ虫虫ゎ 管理员 2014-01-24 19:27:1...

Apache+Mina入门基础

  • 2015年05月12日 17:21
  • 8.57MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:apache Mina自学
举报原因:
原因补充:

(最多只允许输入30个字)