zoukankan      html  css  js  c++  java
  • 快速开发mina(翻译)

    本文的源地址为:http://mina.apache.org/mina-project/quick-start-guide.html

    本文带你进入如何建立一个基于mina程序的全过程。本文将带领你建立一个时间服务器。

    准备工作:

    • MINA 2.0.7 Core
    • JDK 1.5 或者以上版本
    • SLF4 1.3.0 或者以上版本(|http://www.slf4j.org/])
      • Log4J 1.2 版本: slf4j-api.jar, slf4j-log4j12.jar, 和Log4J 1.2.x
      • Log4J 1.3 版本: slf4j-api.jar, slf4j-log4j13.jar, and Log4J 1.3.x
      • java.util.logging 版本: slf4j-api.jar and slf4j-jdk14.jar
      • 注意 : 请确认你使用的 slf4j-*.jar 版本是和你的日志框架版本是相符合的. 例如, slf4j-log4j12.jarlog4j-1.3.x.jar 不能混合到一起使用, 如果这样使用可能会产生问题

    第一步:建立时间服务器:

    MinaTimeServer {
    
        public static void main(String[] args) {
            // code will go here next
        }
    }

    第二步:建立接收connection程序SocketAcceptor

    import org.apache.mina.core.service.IoAcceptor;
    import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
    
    public class MinaTimeServer
    {
        public static void main( String[] args )
        {
            IoAcceptor acceptor = new NioSocketAcceptor();
        }
    }

    第三步:定义处理类,并绑定NioSocketAcceptor到指定端口

    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
    {
        public static void main( String[] args )
        {
            IoAcceptor acceptor = new NioSocketAcceptor();
    
            acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
            acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
        }
    }

    第四步:增加处理类

    import java.io.IOException;
    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
    {
        public static void main( String[] args ) throws IOException
        {
            IoAcceptor acceptor = new NioSocketAcceptor();
    
            acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
            acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
    
            acceptor.setHandler(  new TimeServerHandler() );
        }
    }

    第五步:增加 NioSocketAcceptor配置

    import java.io.IOException;
    import java.nio.charset.Charset;
    
    import org.apache.mina.core.session.IdleStatus;
    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
    {
        public static void main( String[] args ) throws IOException
        {
            IoAcceptor acceptor = new NioSocketAcceptor();
    
            acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
            acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
    
            acceptor.setHandler(  new TimeServerHandler() );
    
            acceptor.getSessionConfig().setReadBufferSize( 2048 );
            acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
        }
    }

    第六步:处理类,继承自IoHandlerAdapter

    import java.util.Date;
    
    import org.apache.mina.core.session.IdleStatus;
    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();
        }
    
        @Override
        public void messageReceived( IoSession session, Object message ) throws Exception
        {
            String str = message.toString();
            if( str.trim().equalsIgnoreCase("quit") ) {
                session.close();
                return;
            }
    
            Date date = new Date();
            session.write( date.toString() );
            System.out.println("Message written...");
        }
    
        @Override
        public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
        {
            System.out.println( "IDLE " + session.getIdleCount( status ));
        }
    }

    第七步:定义时间服务器要监听的地址。

    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 ) throws IOException
        {
            IoAcceptor acceptor = new NioSocketAcceptor();
    
            acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
            acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
    
            acceptor.setHandler( new TimeServerHandler() );
        acceptor.getSessionConfig().setReadBufferSize( 2048 );
            acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
            acceptor.bind( new InetSocketAddress(PORT) );
        }
    }
  • 相关阅读:
    SP笔记:交叉实现七行并成一行
    HTML tag 学习
    操作哈希表
    Efficient bipedal robots based on passivedynamic walkers
    Pushing People Around
    ZEROMOMENT PONTTHIRTY FIVE YEARS OF ITS LIFE

    Active Learning for RealTime Motion Controllers
    Accelerometerbased User Interfaces for the Control of a Physically Simulated Character
    Dynamic Response for Motion Capture Animation
  • 原文地址:https://www.cnblogs.com/davidwang456/p/2999229.html
Copyright © 2011-2022 走看看