Apache Mina开发手册-阿里云开发者社区

开发者社区> 开发与运维> 正文

Apache Mina开发手册

简介: Apache Mina开发手册 一、介绍 Apache Mina是一个网络应用框架,简化用户开发高性能、高可扩展性的网络应用程序的难度。Mina提供了一个抽象的事件驱动的异步API,通过Java NIO实现各种传输协议如TCP/IP和UDP/IP。
Apache Mina开发手册

一、介绍
Apache Mina是一个网络应用框架,简化用户开发高性能、高可扩展性的网络应用程序的难度。Mina提供了一个抽象的事件驱动的异步API,通过Java NIO实现各种传输协议如TCP/IP和UDP/IP。

Apache Mina经常用作:
1)NIO框架库
2)客户端/服务器通信框架库
3)网络Socket通信库

Apache Mina还伴随有不少子项目:
1)Asyncweb
构建于Apache Mina异步框架之上的HTTP服务器
2)FtpServer
一个FTP服务器
3)SSHd
一个Java库,支持SSHH协议
4)Vysper
一个XMPP服务器

二、Apache Mina下载
下载最新的Mina v2.0.8版
地址见: http://mina.apache.org/mina-project/downloads.html

三、用Mina开发时间服务器
说明一下,其实是基于官方的例子,略作了修改,因为发现官方的例子太陈旧,甚至包含了deprecated的方法。

1、先决条件
Apache Mina 2.0.8 Core
JDK 7
SLF4J+LOGBACK

2、项目依赖包
mina-core-2.0.8.jar
slf4j-api-1.6.6.jar


3、编写基于Mina的Time服务器

点击(此处)折叠或打开

  1. package ch.chiqms.server;

  2. import java.io.IOException;
  3. import java.net.InetSocketAddress;
  4. import java.nio.charset.Charset;

  5. import org.apache.mina.core.service.IoAcceptor;
  6. import org.apache.mina.core.session.IdleStatus;
  7. import org.apache.mina.filter.codec.ProtocolCodecFilter;
  8. import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
  9. import org.apache.mina.filter.logging.LoggingFilter;
  10. import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

  11. public class MinaTimeServer {
  12.     private static final int PORT = 9123;
  13.     public static void main(String[] args){
  14.         // 监听连接的对象
  15.         IoAcceptor acceptor = new NioSocketAcceptor();
  16.         
  17.         // 配置过滤器
  18.         // logger过滤器会输出所有的信息,例如新创建的会话、消息的接收、消息的发送、会话的关闭
  19.         // codec过滤器会转换二进制活协议规定的数据为消息对象,这里是处理基于文本的消息
  20.         acceptor.getFilterChain().addLast("logger", new LoggingFilter());
  21.         acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(
  22.                 new TextLineCodecFactory(Charset.forName("UTF-8"))));
  23.         
  24.         //
  25.         acceptor.setHandler(new TimeServerHandler());
  26.         
  27.         // 设置输入缓冲区的大小和会话的IDLE熟悉
  28.         acceptor.getSessionConfig().setReadBufferSize(2048);
  29.         acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
  30.         
  31.         try {
  32.             acceptor.bind(new InetSocketAddress(PORT));
  33.         } catch (IOException e) {
  34.             e.printStackTrace();
  35.         }
  36.     }
  37. }

4、编写Time服务的Handler

点击(此处)折叠或打开

  1. package ch.chiqms.server;

  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;

  4. import org.apache.mina.core.service.IoHandlerAdapter;
  5. import org.apache.mina.core.session.IdleStatus;
  6. import org.apache.mina.core.session.IoSession;

  7. public class TimeServerHandler extends IoHandlerAdapter {

  8.     @Override
  9.     public void exceptionCaught(IoSession session, Throwable cause)
  10.             throws Exception {
  11.         cause.printStackTrace();
  12.     }

  13.     @Override
  14.     public void messageReceived(IoSession session, Object message) throws Exception {
  15.         String str = message.toString();
  16.         if(str.trim().equalsIgnoreCase("quit")){
  17.             session.close(true);
  18.             return;
  19.         }
  20.         Calendar time = Calendar.getInstance();
  21.         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  22.         session.write(df.format(time.getTime()));
  23.         System.out.println("Time Message written...");
  24.     }

  25.     @Override
  26.     public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
  27.         System.out.println("IDLE "+session.getIdleCount(status));
  28.     }

  29. }

5、运行MinaTimeServer
在命令行输入telnet 127.0.0.1 9123


服务器端的输出也可以看到:


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章