Mina是基于java nio实现的一套方便开发高性能远程通信程序的框架。
官方学习文档:https://mina.apache.org/mina-project/userguide/user-guide-toc.html
下面是实例一:简单服务端实例
程序功能:将客户端发送过来的消息打印出来, 并将当前时间发送回客户端
首先新建项目,并加入Mina依赖 (本人创建的maven项目,如果不是maven项目,就去Mina官网下载相应的jar包)
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mina</groupId> <artifactId>mina-test</artifactId> <packaging>jar</packaging> <version>0.0.1-SNAPSHOT</version> <name>mina-test</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.mina</groupId> <artifactId>mina-core</artifactId> <version>2.0.7</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.6</version> </dependency> </dependencies> </project>
接下来是服务端主程序
package com.zf.mina.test01; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.session.IdleStatus; 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 { public static void main(String[] args) throws IOException { //使用IoAcceptor来接收客户端的请求 IoAcceptor acceptor = new NioSocketAcceptor() ; //加入内置的LoggingFilter,用户打印出一个请求过程中的信息 acceptor.getFilterChain().addLast("logger", new LoggingFilter()) ; //使用Mina提供的ProtocolCodecFilter来对消息进行编码和解码,使用Mina提供的TextLineCodecFactory对消息进行分行处理 acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); //设置消息处理器,当接收到消息时,可以进行相应的业务操作 acceptor.setHandler(new TimeServerHandler()) ; //配置Buffer大小 acceptor.getSessionConfig().setReadBufferSize(2048); //如果Session在指定时间内没有事情做(读/写),那么就会触发Handler的sessionIdle方法 acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10) ; //绑定好要监听的端口 acceptor.bind(new InetSocketAddress(8080)) ; } }
消息处理器
package com.zf.mina.test01; import java.util.Date; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; /** * Server端的消息处理器 * @author Administrator * */ public class TimeServerHandler extends IoHandlerAdapter{ /** * 当通信出现异常时会触发该方法 */ public void exceptionCaught(IoSession session, Throwable cause) throws Exception { cause.printStackTrace() ; } /** * 当接收到客户端发来的消息时,此方法会被触发 */ public void messageReceived(IoSession session, Object message) throws Exception { String msg = message.toString() ; //获取客户端发来的消息 if(msg.trim().equalsIgnoreCase("quit")){ session.close(false) ; System.out.println("Session closed"); return ; } System.out.println("收到客户端消息:" + msg); Date date = new Date() ; session.write(date.toLocaleString() ) ; //将消息发送给客户端 System.out.println("Message wittern..."); } public void sessionIdle(IoSession session, IdleStatus status) throws Exception { System.out.println("IDLE " + session.getIdleCount(status) ); } }
此时服务端程序就编写完成了。 现在可以启动MinaTimeServer类了 。
然后打开命令行工具,输入如下命令:
telnet localhost 8080
然后就可以输入内容了。 随便输入什么内容。 会看到会将客户端输入的内容输出, 并且在客户端会打印出当前系统时间