mina简单说就是实现快速,方便,规范的cs结构的服务器,下面简单举例:
编写时间服务器:
public class MinaTimeServer {
private static final int PORT = 9123;
public static void main(String[] args) throws Exception {
// 创建一个接收器
IoAcceptor acceptor = new NioSocketAcceptor();
// 注册过滤器,过滤器的作用类似于servlet的filter
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
// 添加自定义的业务处理
acceptor.setHandler( new TimeServerHandler() );
// 设置read缓冲区和空闲时间
acceptor.getSessionConfig().setReadBufferSize( 2048 );
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
// 绑定端口
acceptor.bind( new InetSocketAddress(PORT) );
}
}
业务类:
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") ) {
// "Quit" ? let's get out ...
session.close(true);
return;
}
// Send the current date back to the client
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 ));
}
}
好了,一个时间服务器做好了,通过telnet localhost 9123连接后,输入任意信息,将返回时间信息。