<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    hengheng123456789

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      297 Posts :: 68 Stories :: 144 Comments :: 0 Trackbacks
     

    Apache MINA 快速入門

     

    http://hi.baidu.com/ofbase/blog/item/9acf45d05989f88ea1ec9c11.html

    Added by Mark Webb, last edited by Trustin Lee on Apr 16, 2007    (view change)

    1    簡介

    建立一個基于MINA的時間服務(wù)器,下面的內(nèi)容需要先準備好。

    MINA 1.1 Core
    JDK 1.5 or greater
    SLF4J    1.3.0 or greater
    >>Log4J 1.2 users: slf4j-api.jar, slf4j-log4j12.jar, and Log4J    1.2.x
    >>Log4J 1.3 users: slf4j-api.jar, slf4j-log4j13.jar, and Log4J    1.3.x
    >>java.util.logging users: slf4j-api.jar and slf4j-jdk14.jar

    這個程序只測試了Windows2000proLinux系統(tǒng),并且在做的時候沒有依賴于一些開發(fā)平臺的環(huán)境。

    2    編寫MINA時間服務(wù)

    下面先建立一個文件MinaTimeServer.java,代碼如下:

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

    下面會慢慢將這個類寫完,這里先定義一個main用于啟動程序。這一步結(jié)束后,還需要一個監(jiān)聽連接的對象,因為這個程序是基于TCP/IP的,這里將增加一個SocketAcceptor

    import org.apache.mina.common.IoAcceptor;
    import org.apache.mina.transport.socket.nio.SocketAcceptor;

    public class MinaTimeServer {
        public static void main(String[] args) {
          // The following two lines change the default buffer type to 'heap',
          // which yields better performance.
          ByteBuffer.setUseDirectBuffers(false);
          ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
          IoAcceptor acceptor = new SocketAcceptor();
        }
    }

    通過這里的SocketAcceptor類,下面將把它綁定到一個端口上,如果你想增加一個線程模型到該類的話,參考"配置線程模型"部分。

    import java.io.IOException;
    import java.net.InetSocketAddress;
    import org.apache.mina.common.IoAcceptor;
    import org.apache.mina.transport.socket.nio.SocketAcceptor;

    public class MinaTimeServer {
        private static final int PORT = 9123;

        public static void main(String[] args) throws IOException {
          ByteBuffer.setUseDirectBuffers(false);
          ByteBuffer.setAllocator(new SimpleByteBufferAllocator());

          IoAcceptor acceptor = new SocketAcceptor();

          SocketAcceptorConfig cfg = new SocketAcceptorConfig();
          cfg.getSessionConfig().setReuseAddress( true );
          cfg.getFilterChain().addLast( "logger", new LoggingFilter() );
          cfg.getFilterChain().addLast( "codec", new ProtocolCodecFilter(
                              new TextLineCodecFactory( Charset.forName( "UTF-8" ))));

          acceptor.bind( new InetSocketAddress(PORT), new TimeServerHandler(), cfg);
          System.out.println("MINA Time server started.");
        }
    }

    這里定義了一個整型的端口變量,呼叫SocketAcceptor.bind(SocketAddress,IoHandler,cfg),第一個參數(shù)是要監(jiān)聽的網(wǎng)址,是本地的9123端口。

    第二個參數(shù)傳的是實現(xiàn)IoHandler接口的類,是服務(wù)于所有的客戶端請求的。在這里,將會擴展IoHandlerAdapter類,這類遵循"適配器設(shè)計模式"的。

    第三個參數(shù)是配置對象,用于配置日志和編碼過濾器。每一個信息都會通過在IoAcceptor中定義的過濾器鏈的所有過濾器。在這風(fēng)景點,將會將信息通過日志和編碼過濾器。日志過濾器用SL4J庫記錄信息,而編碼過濾器則反編碼所有收到的信息,并且將所有TextLineCodecFactory發(fā)送的信息進行編碼。

    下面就是TimeServerHandler類的代碼:

    import java.util.Date;
    import org.apache.mina.common.IoHandlerAdapter;
    import org.apache.mina.common.IoSession;

    public class TimeServerHandler extends IoHandlerAdapter {

        public void exceptionCaught(IoSession session, Throwable t) throws Exception {
          t.printStackTrace();
          session.close();
        }

        public void messageReceived(IoSession session, Object msg) throws Exception {
          String str = msg.toString();
          if( str.trim().equalsIgnoreCase("quit") ) {
            session.close();
            return;
          }
          Date date = new Date();
          session.write( date.toString() );
          System.out.println("Message written...");
        }

        public void sessionCreated(IoSession session) throws Exception {
          System.out.println("Session created...");
          if( session.getTransportType() == TransportType.SOCKET )
            ((SocketSessionConfig) session.getConfig() ).setReceiveBufferSize( 2048 );
          session.setIdleTime( IdleStatus.BOTH_IDLE, 10 );
        }
    }

    這里用于管理信息,覆蓋了exceptionCaughtmessageReceivedsessionCreated方法,如前所示,該類擴展了IoHandlerAdapter

    exceptionCaught方法將會打印錯誤并且關(guān)閉對話,對于大多數(shù)的情況來講,這是標準的處理方法,除非能從異常中恢復(fù)過來。

    messageReceived方法將收到從客戶端發(fā)來的數(shù)據(jù),并且寫回當(dāng)前時間。如果收到了"quit",對話將被關(guān)閉。該方法將當(dāng)前時間發(fā)往客戶端,依賴于你使用的協(xié)議編碼,發(fā)送至方法的對象(第二個參數(shù))會有不同,發(fā)送到session.write(Object)方法的對象類同。如果你沒有指定協(xié)議編碼,則一般會收到ByteBuffer對象,而發(fā)送的也要是ByteBuffer對象。

    sessionCreated方法用于對話初始化,在這里,先打印一條信息,然后判斷對話的類型,再設(shè)置緩沖大小,這里設(shè)置的是2048個字節(jié)。空閑時間設(shè)置為10秒,如果覆蓋了sessionIdle方法,則該方法每10秒被呼叫一次。

    3    測試

    到這里,編譯程序。如果成功,那么運行,然后telnet這個程序,如下所示:

    客戶端內(nèi)容:
    user@myhost:~> telnet 127.0.0.1 9123
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    hello
    Mon Apr 09 23:42:55 EDT 2007
    quit
    Connection closed by foreign host.
    user@myhost:~>

    服務(wù)端內(nèi)容:
    MINA Time server started.
    Session created...
    Message written...

    4 參考文檔

        Apache MINA Quick Start Guide http://mina.apache.org/documentation.html

          Added by Mark Webb, last edited by Trustin Lee on Apr 16, 2007    (view change)

    posted on 2007-09-03 15:38 哼哼 閱讀(1289) 評論(0)  編輯  收藏 所屬分類: JAVA-Web
    主站蜘蛛池模板: 亚洲国产精品国自产拍AV| 成人免费网站视频www| 国产精品免费观看调教网| 亚洲精品456播放| 人成免费在线视频| 国产国拍亚洲精品福利 | 亚洲视频在线一区| 无码国产精品一区二区免费模式 | 免费国产小视频在线观看| 亚洲AV成人无码网站| 免费人成再在线观看网站| 免费v片视频在线观看视频| 免费毛片毛片网址| 亚洲综合精品香蕉久久网| 2020久久精品亚洲热综合一本 | 亚洲av无码乱码在线观看野外| 国产亚洲精品美女2020久久 | 国产成人精品免费视频大全麻豆| 亚洲精品视频在线免费| 国产精品久久久久久久久久免费| 亚洲精品国产精品乱码不卞| 一级毛片a免费播放王色| 国产精品嫩草影院免费| 极品美女一级毛片免费| 国产亚洲精品一品区99热| 曰批全过程免费视频观看免费软件| 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 亚洲人妻av伦理| 日本一卡精品视频免费| 成人午夜亚洲精品无码网站| 免费国产在线视频| 亚洲精品无码乱码成人 | 美女羞羞视频免费网站| 亚洲精品乱码久久久久久| 2021国产精品成人免费视频| 婷婷亚洲综合五月天小说在线 | 中文字幕第一页亚洲| 黄色网址在线免费观看| 亚洲AV无码乱码国产麻豆| 免费国产黄线在线观看| 精品无码一级毛片免费视频观看 |