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);// 显示接收到的消息  

}

}

简单的小例子,做个笔记

转载于:https://www.cnblogs.com/zhaofeng555/p/3370075.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Mina是一个用于开发高性能、高可扩展性网络应用程序的Java框架。它提供了一种简单和灵活的方式来构建基于TCP/IP和UDP/IP协议的客户端和服务器端应用。 在学习Apache Mina时,首先需要了解它的基本概念和架构。Mina采用了NIO(非阻塞IO)的方式来实现网络通信。它的核心组件是IoService,它负责接收客户端的连接请求,并将请求分发给对应的I/O处理器进行处理。而I/O处理器则负责实际的数据读写和业务逻辑的处理。 在使用Mina进行开发时,我们首先需要创建一个IoAcceptor对象来监听指定的端口,并设置相应的处理器。当有客户端发起连接请求时,IoAcceptor会接收并处理这些请求。同时,我们还需要编写相应的I/O处理器来对接收到的数据进行处理和响应。 Mina还提供了一些便捷的工具类和接口,以简化开发过程。例如,可以使用IoBuffer来处理数据的读写,它类似于Java NIO中的ByteBuffer。同时,Mina还提供了一些过滤器,可以在数据传输的过程中进行一些常用的操作,比如加密、压缩、编解码等。 值得一提的是,Mina支持多种编解码协议,包括自定义的协议。它可以根据指定的编解码规则将数据进行解析和组装。这在实际应用中非常实用,因为经常会遇到需要对传输的数据进行编码和解码的情况。 总的来说,学习Apache Mina需要了解其基本概念、架构和核心组件,并掌握基本的开发流程和常用的工具类和接口。通过学习Mina,我们可以更加方便地开发出高性能、高可扩展性的网络应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值