Mina初探
Mina初探
吴汉宏 发表于6个月前
Mina初探
  • 发表于 6个月前
  • 阅读 76
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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

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字符串时,回话结束。

标签: MINA
共有 人打赏支持
粉丝 2
博文 6
码字总数 2269
×
吴汉宏
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: