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

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

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

    隨筆-159  評論-114  文章-7  trackbacks-0

    基于MINA框架快速開發網絡應用程序

    1.MINA框架簡介 MINA(Multipurpose Infrastructure for Network Applications)是用于開發高性能和高可用性的網絡應用程序的基礎框架。

    通過使用MINA框架可以可以省下處理底層I/O和線程并發等復雜工作,開發人員能夠把更多的精力投入到業務設計和開發當中。
    MINA框架的應用比較廣泛,應用的開源項目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。MINA框架當前穩定版本是1.1.6,最新的2.0版本目前已經發布了M1版本。

    MINA框架的特點有:基于java NIO類庫開發;采用非阻塞方式的異步傳輸;事件驅動;支持批量數據傳輸;支持TCP、UDP協議;控制反轉的設計模式(支持Spring);采用優雅的松耦合架構;可靈活的加載過濾器機制;單元測試更容易實現;可自定義線程的數量,以提高運行于多處理器上的性能;采用回調的方式完成調用,線程的使用更容易。

    2.MINA框架的常用類 類NioSocketAcceptor用于創建服務端監聽; 類NioSocketConnector用于創建客戶端連接; 類IoSession用來保存會話屬性和發送消息; 類IoHandlerAdapter用于定義業務邏輯,常用的方法有: 方法 定義 sessionCreated() 當會話創建時被觸發 sessionOpened() 當會話開始時被觸發 sessionClosed() 當會話關閉時被觸發 sessionIdle() 當會話空閑時被觸發 exceptionCaught() 當接口中其他方法拋出異常未被捕獲時觸發此方法 messageRecieved() 當接收到消息后被觸發 messageSent() 當發送消息后被觸發

    3.服務端應用開發示例 下面將以MINA2.0M1版本為基礎,通過一個范例來演示一下如何使用MINA框架進行開發。開發環境為jdk6.0,開發工具NetBeans6.0,所需jar包slf4j-api.jar、slf4j-jdk14.jar、MINA-core-2.0.0-M1.jar。 首先定義一個業務邏輯處理器TimeServerHandler,繼承自IoHandlerAdapter,實現的功能有:當客戶端創建會話時會顯示客戶端設備的IP和端口;當客戶端輸入quit時結束會話;客戶端輸入其它內容時則向客戶端發送當前時間。

    代碼如下: public class TimeServerHandler extends IoHandlerAdapter {
      @Override
      public void sessionCreated(IoSession session) {
       //顯示客戶端的ip和端口
       System.out.println(session.getRemoteAddress().toString());
      }
      
      @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...");
      } }
      
    再定義一個類MinaTimeServer用來啟動服務端:
      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.setDefaultLocalAddress( new InetSocketAddress(PORT) );
        //設置端口號 acceptor.bind();
        //啟動監聽
       }
      }


    4.測試
     
     首先運行MinaTimeServer,啟動服務端,接著在命令行運行“telnet 127.0.0.1 9123”,
     來登錄,這時會看到服務端輸出如下: 2008-2-21 16:15:29 org.apache.MINA.filter.logging.LogLevel$4 log /10.64.2.137:4140 àIP和端口號
     信息: CREATED 2008-2-21 16:15:29 org.apache.MINA.filter.logging.LogLevel$4 log 信息: OPENED 在客戶端輸入回車,在客戶端可以看到服務端返回當前的時間:
     
      Thu Feb 21 16:20:14 CST 2008 服務端輸出: 2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log 信息: RECEIVED: HeapBuffer[pos=0 lim=2 cap=2048: 0D 0A] à接收收到回車符 Message written... 2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log 信息: SENT: HeapBuffer[pos=0 lim=29 cap=30: 54 68 75 20 46 65 62 20 32 31 20 31 36 3A 32 30...] 2008-2-21 16:20:14 org.apache.MINA.filter.logging.LogLevel$4 log 信息: SENT: HeapBuffer[pos=0 lim=0 cap=0: empty]

     


    5.客戶端開發示例 首先定義類TimeClientHandler來處理消息接收事件:

    class TimeClientHandler extends IoHandlerAdapter{
                public TimeClientHandler() { }
                @Override
                public void messageReceived(IoSession session, Object message) throws Exception {
                       System.out.println(message);//顯示接收到的消息
                }
    }

    接著定義MinaTimeClient類用于連接服務端,并向服務端發送消息:
            public class MinaTimeClient {
                  public static void main(String[] args) {
                      // 創建客戶端連接器.
                      NioSocketConnector connector = new NioSocketConnector();
                      connector.getFilterChain().addLast( "logger", new LoggingFilter() );
                      connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" )))); //設置編碼過濾器             connector.setConnectTimeout(30);
                      connector.setHandler(new TimeClientHandler());
                      //設置事件處理器
                       ConnectFuture cf = connector.connect( new InetSocketAddress("127.0.0.1", 9123));
                      //建立連接
                      cf.awaitUninterruptibly();
                     //等待連接創建完成
                     cf.getSession().write("hello");
                     //發送消息
                     cf.getSession().write("quit");
                     //發送消息
                     cf.getSession().getCloseFuture().awaitUninterruptibly();
                     //等待連接斷開
                    connector.dispose();
                   }
             }

    6.總結 通過上述示例可以了解到:使用MINA框架來開發的網絡應用程序代碼結構更清晰;MINA框架完成了底層的線程管理;MINA內置的編碼器可以滿足大多數用戶的需求,省去了開發人員消息編碼解碼的工作。具稱使用MINA開發服務器程序的性能已經逼近使用 C/C++ 語言開發的網絡服務。因此,建議在網絡應用程序開發過程中嘗試使用MINA框架來提高我們的開發效率和應用程序的執行效率。



    posted on 2010-03-31 11:10 北國狼人的BloG 閱讀(247) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 成年免费大片黄在线观看com| 最新亚洲人成网站在线观看| 亚洲国产综合91精品麻豆| 亚洲高清国产拍精品26U| 亚洲高清免费在线观看| 亚洲中文字幕日本无线码| 亚洲av无码片vr一区二区三区 | 亚洲精品成a人在线观看| 亚洲AV无码久久精品成人 | 成人嫩草影院免费观看| 久久青青草原亚洲av无码| 亚洲中文无码线在线观看| 亚洲日本香蕉视频| 欧洲美女大片免费播放器视频 | 欧美三级在线电影免费| 亚洲情侣偷拍精品| gogo免费在线观看| 免费精品人在线二线三线区别| 国产精品高清视亚洲精品| 午夜无遮挡羞羞漫画免费| 美女被免费视频网站a国产| 特级毛片A级毛片免费播放| 免费无码又爽又刺激聊天APP| 亚洲av无码有乱码在线观看| 免费人成视频在线观看视频| 亚洲日本在线播放| 国产男女性潮高清免费网站 | 亚洲国产另类久久久精品黑人| 亚洲欧美自偷自拍另类视| 嫩草在线视频www免费看| 精品国产免费观看久久久| gogo免费在线观看| 亚洲国产美女福利直播秀一区二区 | 2015日韩永久免费视频播放| 在线观看亚洲天天一三视| 小说区亚洲自拍另类| 不卡一卡二卡三亚洲| 久久A级毛片免费观看| 亚洲精品一品区二品区三品区| 精品久久8x国产免费观看| 亚洲Av综合色区无码专区桃色|