package com.mina.server;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
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.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class MinaServer {
/**
* 缺省连接超时时间
*/
public static final int DEFAULT_CONNECT_TIMEOUT = 10;
public void init(int port) throws Exception {
//虚拟机处理器数量
int processCount = Runtime.getRuntime().availableProcessors();
//服务器端
SocketAcceptor acceptor = new NioSocketAcceptor(processCount + 1);
//服务端设置解析器
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
//设置消息处理类(创建、关闭Session,可读可写等等,继承自接口IoHandler)
acceptor.setHandler(new ServerHandler());
//设置接收缓存区大小
acceptor.getSessionConfig().setReadBufferSize(2);
//设置10秒内未有连接自动断开(服务器设置即可)
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, DEFAULT_CONNECT_TIMEOUT);
acceptor.getSessionConfig().setIdleTime(IdleStatus.READER_IDLE, DEFAULT_CONNECT_TIMEOUT);
acceptor.getSessionConfig().setIdleTime(IdleStatus.WRITER_IDLE, DEFAULT_CONNECT_TIMEOUT);
//监听端口
acceptor.bind(new InetSocketAddress(port));
}
}