Java网络框架mina使用介绍

2016-04-17 20:56:00
admin
原创 2238
摘要:Java网络框架mina使用介绍

一、什么是mina?

Apache MINA is a network application framework which helps users develop high performance and high scalability network applications easily. It provides an abstract ·event-driven · asynchronous API over various transports such as TCP/IP and UDP/IP via Java NIO.


二、mina常用包介绍

连接

org.apache.mina.core.service.* 用于提供连接的service

org.apache.mina.transport.* 用于提供连接的service的实现


会话

org.apache.mina.core.session.* 用于提供两端状态的session


IO过滤器

org.apache.mina.core.filterchain.* filter的框架
org.apache.mina.filter.* 各种filter的实现


IO业务逻辑

org.apache.mina.handler.* 用于处理IO事件的handler


特性

org.apache.mina.core.future.* 用于实现异步IO操作的future
org.apache.mina.core.polling.* 用于实现IO轮询的的polling
org.apache.mina.proxy.* 用于实现代理的proxy


三、mina重要接口

IoServiece :(默认一个线程)

这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。


IoProcessor :(默认CPU核数+1个线程),处理IOFilter。

这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO编码时的一个不同之处,通常在JAVA NIO编码中,我们都是使用一个Selector,也就是不区分IoService与IoProcessor两个功能接口。


IoHandler :(可以配置是否使用线程)

这个接口负责编写业务逻辑,也就是接收、发送数据的地方。这也是实际开发过程中需要用户自己编写的部分代码。


四、代码示例

代码下载:MinaDemo.java

代码下载:TimeServerHandler.java

工程下载:mina.rar


类MinaDemo:

import java.io.*;
import java.net.*;
import java.nio.charset.*;
import org.apache.mina.core.service.*;
import org.apache.mina.core.session.*;
import org.apache.mina.core.filterchain.*;
import org.apache.mina.filter.codec.*;
import org.apache.mina.filter.codec.textline.*;
import org.apache.mina.filter.logging.*;
import org.apache.mina.transport.socket.nio.*;

public class MinaDemo {

private static final int PORT = 9123;

public static void addEventLog(IoAcceptor acceptor) {
//Logs all MINA protocol events.
IoFilter eventLog = new LoggingFilter();
acceptor.getFilterChain().addLast("logger", eventLog);
}

public static void addTextCodec(IoAcceptor acceptor) {
IoFilter codec = new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8")));
acceptor.getFilterChain().addLast("codec", codec);
}

public static void configServer(IoAcceptor acceptor) {
IoSessionConfig config = acceptor.getSessionConfig();
config.setReadBufferSize(2048);
config.setIdleTime(IdleStatus.BOTH_IDLE, 10);
}

public static void main(String[] args) throws IOException {
IoAcceptor acceptor = new NioSocketAcceptor();
addEventLog(acceptor);
addTextCodec(acceptor);
configServer(acceptor);
acceptor.setHandler(new TimeServerHandler());
        acceptor.bind(new InetSocketAddress(PORT));
}
}


TimeServerHandler:

import java.util.*;
import org.apache.mina.core.service.*;
import org.apache.mina.core.session.*;

public class TimeServerHandler extends IoHandlerAdapter {

public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
        cause.printStackTrace();
    }

    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...");
    }
    
    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
        System.out.println("IDLE " + session.getIdleCount(status));
        System.out.println(status);
    }
}

发表评论
评论通过审核之后才会显示。