Mina初探

最近因为工做内容比较空闲,加上对于Java网络框架方面知识的欠缺,决定深刻学习NIO框架Mina及Netty;如下是Mina框架最简单的HelloWorld Demo。windows

MinaServer:
public class MinaServer {
    public static void main(String[] args){
        try {
            //建立一个IoAcceptor实例
            NioSocketAcceptor acceptor = new NioSocketAcceptor();
            //添加解码器
            acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory()));
            //添加日志
            acceptor.getFilterChain().addLast("logger", new LoggingFilter());
            //指定IoHandler
            acceptor.setHandler(new MinaServerAdapter());
            //绑定端口
            acceptor.bind(new InetSocketAddress(Constants.PORT));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
MinaServerAdapter
public class MinaServerAdapter extends IoHandlerAdapter {
    //sessionCreated:建立时回调
    @Override
    public void sessionCreated(IoSession session) throws Exception {
        System.out.println("sessionCreated");
    }
    //sessionOpened:打开时回调
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        System.out.println("sessionOpened");
    }
    //sessionClosed:关闭时回调
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        System.out.println("sessionClosed");
    }
    //sessionIdle:进入空闲时回调
    @Override
    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
        System.out.println("sessionIdle");
    }
    //出现异常时回调
    @Override
    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
        cause.printStackTrace();
        System.out.println("exceptionCaught:"+cause.getMessage());
    }
    /**
     * 接收到消息时回调
     */
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        String str = message.toString();
        System.out.println("Received Message is: " + str);
        if("exit".equals(str)){
            System.out.println("client exit: " + str);
            session.write("client exit");
            session.closeNow();
            return;
        }
        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        session.write(format.format(date)+" Received Client Message : "+message);
    }

    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
        System.out.println("messageSent");
    }
}

此时运行MinaServer的main方法,便可启动Mina服务端。在windows系统下启动CMD/Unix系统下启动终端,输入telnet IP PORT连接到Mina服务端,并可向Mina服务端发送消息。网络

当Mina服务端收到exit字符串时,回话结束。session

相关文章
相关标签/搜索