天天看点

Apache Mina开发手册

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版

三、用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

Apache Mina开发手册

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

点击(此处)折叠或打开

package ch.chiqms.server;

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 {

    private static final int PORT = 9123;

    public static void main(String[] args){

        // 监听连接的对象

        IoAcceptor acceptor = new NioSocketAcceptor();

        // 配置过滤器

        // logger过滤器会输出所有的信息,例如新创建的会话、消息的接收、消息的发送、会话的关闭

        // codec过滤器会转换二进制活协议规定的数据为消息对象,这里是处理基于文本的消息

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

        acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(

                new TextLineCodecFactory(Charset.forName("UTF-8"))));

        //

        acceptor.setHandler(new TimeServerHandler());

        // 设置输入缓冲区的大小和会话的IDLE熟悉

        acceptor.getSessionConfig().setReadBufferSize(2048);

        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

        try {

            acceptor.bind(new InetSocketAddress(PORT));

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

4、编写Time服务的Handler

import java.text.SimpleDateFormat;

import java.util.Calendar;

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

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

public class TimeServerHandler extends IoHandlerAdapter {

    @Override

    public void exceptionCaught(IoSession session, Throwable cause)

            throws Exception {

        cause.printStackTrace();

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

        String str = message.toString();

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

            session.close(true);

            return;

        Calendar time = Calendar.getInstance();

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        session.write(df.format(time.getTime()));

        System.out.println("Time Message written...");

    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {

        System.out.println("IDLE "+session.getIdleCount(status));

5、运行MinaTimeServer

在命令行输入telnet 127.0.0.1 9123

Apache Mina开发手册

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

Apache Mina开发手册