zoukankan      html  css  js  c++  java
  • Mina笔记

    1.MINA框架简介
    MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。
    通过使用MINA框架可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。
    MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。
    MINA框架当前稳定版本是1.1.6,最新的2.0版本目前已经发布了M1版本。
    MINA框架的特点有:
    基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);
    采用优雅的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。

    2.MINA框架的常用类
    类NioSocketAcceptor用于创建服务端监听;
    类NioSocketConnector用于创建客户端连接;
    类IoSession用来保存会话属性和发送消息;
    类IoHandlerAdapter用于定义业务逻辑,常用的方法有:
    方法             定义
    sessionCreated() 当会话创建时被触发
    sessionOpened() 当会话开始时被触发
    sessionClosed() 当会话关闭时被触发
    sessionIdle() 当会话空闲时被触发
    exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法
    messageRecieved() 当接收到消息后被触发
    messageSent() 当发送消息后被触发

    3.例子:引入mina下的lib包,还有log4j-xxx.jar和slf4j-log4jxx.jar

    服务器端:

    import java.io.IOException; import java.net.InetSocketAddress;

    import java.nio.charset.Charset;

    import org.apache.mina.core.service.IoAcceptor;

    import org.apache.mina.filter.codec.ProtocolCodecFilter;

    import org.apache.mina.filter.codec.textline.TextLineCodecFactory;

    import org.apache.mina.filter.logging.LoggingFilter;

    import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

    public class MinaTimeServer {

     private static final int PORT = 9123;// 定义监听端口

     public static void main(String[] args) throws IOException {   

    IoAcceptor acceptor = new NioSocketAcceptor();// 创建一个非阻塞的Server端Socket,用NIO   

    acceptor.getFilterChain().addLast("logger", new LoggingFilter());  

     acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));// 指定编码过滤器   

    acceptor.setHandler(new TimeServerHandler());// 指定业务逻辑处理器   

    acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT));// 设置端口号   

    acceptor.bind();// 启动监听

    }

    }

    import java.text.DateFormat;

    import java.util.Date;

    import org.apache.mina.core.service.IoHandlerAdapter;

    import org.apache.mina.core.session.IoSession;

    public class TimeServerHandler extends IoHandlerAdapter {

     @Override  

    public void sessionCreated(IoSession session) {   // 显示客户端的ip和端口   

    System.out.println(session.getRemoteAddress().toString());  

    }

     @Override  

    public void messageReceived(IoSession session, Object message) throws Exception {   

    String str = message.toString();   

    Date date = new Date();   

    DateFormat d = DateFormat.getDateTimeInstance();   

    String strDate = d.format(date);   

    session.write(str);// 返回当前时间的字符串   

    System.out.println("收到客户端发来的消息:" + str + " " + strDate);  }

    }

    客户端:

    import java.net.InetSocketAddress;

    import java.nio.charset.Charset;

    import org.apache.mina.core.future.ConnectFuture;

    import org.apache.mina.filter.codec.ProtocolCodecFilter;

    import org.apache.mina.filter.codec.textline.TextLineCodecFactory;

    import org.apache.mina.filter.logging.LoggingFilter;

    import org.apache.mina.transport.socket.nio.NioSocketConnector;

    public class MinaTimeClient {

     public static void main(String[] args) {   

    // 创建客户端连接器.   

    NioSocketConnector connector = new NioSocketConnector();   

    connector.getFilterChain().addLast("logger", new LoggingFilter());   

    connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); // 设置编码过滤器   

    connector.setConnectTimeout(30);// 设置连接超时   

    connector.setHandler(new TimeClientHandler());// 设置消息处理器   

    ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1",     9123));// 建立连接   

    cf.awaitUninterruptibly();// 等待连接创建完成   

    cf.getSession().write("hello");// 发送消息   

    cf.getSession().write("你好");// 发送消息   

    cf.getSession().write("quit");// 发送消息   

    cf.getSession().getCloseFuture().awaitUninterruptibly();// 等待连接断开   

    connector.dispose();  

    }

    }

    import org.apache.mina.core.service.IoHandlerAdapter;

    import org.apache.mina.core.session.IoSession;

    public class TimeClientHandler extends IoHandlerAdapter {

     @Override  

    public void messageReceived(IoSession session, Object message)    throws Exception {   

    String str = message.toString();   

    if (str.trim().equalsIgnoreCase("quit")) {    

    session.close(true);// 结束会话    

    return;   

    }   

    System.out.println("收到服务端发来的消息:" + message);// 显示接收到的消息  

    }

    }

    简单的小例子,做个笔记

  • 相关阅读:
    课时8:环绕通知
    课时7:后置通知、异常通知
    课时6::AOP、execution表达式、前置通知
    课时:5 使用注解实现声明式事务
    课时22::PageHelper分页插件
    课时21 :使用MyBatis实现批量操作
    课时4:特殊值的注入问题和各种类型的自动装配
    课时3:三种方式的依赖注入、给各种集合类型的属性注入
    课时2:解耦合发展史、控制反转、依赖注入
    课时1:Spring环境搭建、STS工具、第一个Spring程序
  • 原文地址:https://www.cnblogs.com/zhaofeng555/p/3370075.html
Copyright © 2011-2022 走看看