Apache Mina執行個體

來源:互聯網
上載者:User

Apache MINA(Multipurpose Infrastructure for Network Applications)

官網http://mina.apache.org/

是 Apache 組織一個較新的項目,它為開發高效能和高可用性的網路應用程式提供了非常便利的架構。當前發行的 MINA 版本支援基於 Java NIO 技術的 TCP/UDP 應用程式開發、串口通訊程式(只在最新的預覽版中提供),MINA 所支援的功能也在進一步的擴充中。   目前正在使用 MINA 的軟體包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia
Flash Media RTMP)、ObjectRADIUS、Openfire 等等。

本文就介紹入門mina的入門,

參考文檔http://mina.apache.org/mina-project/quick-start-guide.html

第一步、定義MinaTimeServer.java mina服務端

/** * */package com.figo.onlineshop.test; 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; /** * @author zhuzhifei * */public class MinaTimeServer {    private static final int PORT = 9123;           /**           * @param args           */          public static void main(String[] args) {                   // TODO Auto-generated method stub                   //定義socket接收器                   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() );        //設定讀取資料緩衝單位byte        acceptor.getSessionConfig().setReadBufferSize( 2048 );        //設定多長時間後接收器開始空閑        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );         try {                  //綁定某個連接埠,作為資料入口                            acceptor.bind( new InetSocketAddress(PORT) );                   } catch (IOException e) {                            // TODO Auto-generated catch block                            e.printStackTrace();                   }            } } 

第二步、定義訊息處理器TimeServerHandler.java

/** * */package com.figo.onlineshop.test; 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;import org.slf4j.Logger;import org.slf4j.LoggerFactory; /** * @author zhuzhifei * *///必須繼承IoHandlerAdapterpublic class TimeServerHandler extends IoHandlerAdapter {    private final Logger logger = LoggerFactory.getLogger(MinaTimeServer.class);    //補抓異常          @Override          public void exceptionCaught(IoSession session, Throwable cause)                            throws Exception {                   // TODO Auto-generated method stub                   super.exceptionCaught(session, cause);          }    //擷取用戶端訊息後處理邏輯          @Override          public void messageReceived(IoSession session, Object message)                             throws Exception {                   // TODO Auto-generated method stub                   super.messageReceived(session, message);                   String str = message.toString();        if( str.trim().equalsIgnoreCase("quit") ) {            session.close(true);            return;        }         Date date = new Date();        session.write( "current time:"+date.toString() );//該訊息將返回給用戶端        System.out.println("Message Received:"+str);        logger.info(date.toString()+"Message Received:"+str);//日誌沒有輸出why?           }    //發送訊息          @Override          public void messageSent(IoSession session, Object message) throws Exception {                   // TODO Auto-generated method stub                   super.messageSent(session, message);          }    //當前會話關閉          @Override          public void sessionClosed(IoSession session) throws Exception {                   // TODO Auto-generated method stub                   super.sessionClosed(session);          }    //建立會話          @Override          public void sessionCreated(IoSession session) throws Exception {                   // TODO Auto-generated method stub                   super.sessionCreated(session);          }    //會話空閑          @Override          public void sessionIdle(IoSession session, IdleStatus status)                            throws Exception {                   // TODO Auto-generated method stub                   super.sessionIdle(session, status);                   System.out.println( "IDLE " + session.getIdleCount( status ));          }    //開啟會話          @Override          public void sessionOpened(IoSession session) throws Exception {                   // TODO Auto-generated method stub                   super.sessionOpened(session);          }}

第三步、類比用戶端tcp調用

MinaTimeServer.java run as java Application後

C:\Documents and Settings\zhuzhifei>telnet 127.0.0.1 9123 連上伺服器

用戶端輸入:abc後

服務端接收到:

2012-12-25 18:26:52 INFO  com.figo.onlineshop.test.MinaTimeServer - Tue Dec 25 18:26:52 CST 2012Message Received:abc

用戶端顯示:current time:Tue Dec 25 18:26:52 CST 2012

轉自【http://www.open-open.com/lib/view/open1375802152718.html】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.