Java网络框架mina使用介绍
- 2016-04-17 20:56:00
- admin
- 原创 2238
一、什么是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
工程下载: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);
}
}