日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache Mina开发手册

發布時間:2025/6/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache Mina开发手册 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:chszs,轉載需注明。博客主頁:http://blog.csdn.net/chszs

一、介紹

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版

地址見:http://mina.apache.org/mina-project/downloads.html


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



3、編寫基于Mina的Time服務器

[java]?view plaincopyprint?
  • package?ch.chiqms.server;??
  • ??
  • import?java.io.IOException;??
  • import?java.net.InetSocketAddress;??
  • import?java.nio.charset.Charset;??
  • ???
  • importorg.apache.mina.core.service.IoAcceptor;??
  • importorg.apache.mina.core.session.IdleStatus;??
  • importorg.apache.mina.filter.codec.ProtocolCodecFilter;??
  • importorg.apache.mina.filter.codec.textline.TextLineCodecFactory;??
  • importorg.apache.mina.filter.logging.LoggingFilter;??
  • import?org.apache.mina.transport.socket.nio.NioSocketAcceptor;??
  • ???
  • public?class?MinaTimeServer?{??
  • ?????????privatestatic?final?int?PORT?=?9123;??
  • ?????????publicstatic?void?main(String[]?args){??
  • ???????????????????//監聽連接的對象??
  • ???????????????????IoAcceptoracceptor?=?new?NioSocketAcceptor();??
  • ????????????????????
  • ???????????????????//配置過濾器??
  • ???????????????????//logger過濾器會輸出所有的信息,例如新創建的會話、消息的接收、消息的發送、會話的關閉??
  • ???????????????????//codec過濾器會轉換二進制活協議規定的數據為消息對象,這里是處理基于文本的消息??
  • ???????????????????acceptor.getFilterChain().addLast("logger",new?LoggingFilter());??
  • ???????????????????acceptor.getFilterChain().addLast("codec",new?ProtocolCodecFilter(??
  • ?????????????????????????????????????newTextLineCodecFactory(Charset.forName("UTF-8"))));??
  • ???????????????????
  • ???????????????????//??
  • ???????????????????acceptor.setHandler(newTimeServerHandler());??
  • ????????????????????
  • ???????????????????//設置輸入緩沖區的大小和會話的IDLE熟悉??
  • ???????????????????acceptor.getSessionConfig().setReadBufferSize(2048);??
  • ???????????????????acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);??
  • ????????????????????
  • ???????????????????try{??
  • ????????????????????????????acceptor.bind(newInetSocketAddress(PORT));??
  • ???????????????????}catch?(IOException?e)?{??
  • ????????????????????????????e.printStackTrace();??
  • ???????????????????}??
  • ?????????}??
  • }??

  • 4、編寫Time服務的Handler

    [java]?view plaincopyprint?
  • package?ch.chiqms.server;??
  • ???
  • import?java.text.SimpleDateFormat;??
  • import?java.util.Calendar;??
  • ???
  • import?org.apache.mina.core.service.IoHandlerAdapter;??
  • importorg.apache.mina.core.session.IdleStatus;??
  • importorg.apache.mina.core.session.IoSession;??
  • ???
  • public?class?TimeServerHandler?extendsIoHandlerAdapter?{??
  • ???
  • ?????????@Override??
  • ?????????publicvoid?exceptionCaught(IoSession?session,?Throwable?cause)??
  • ????????????????????????????throwsException?{??
  • ???????????????????cause.printStackTrace();??
  • ?????????}??
  • ???
  • ?????????@Override??
  • ?????????publicvoid?messageReceived(IoSession?session,?Object?message)?throws?Exception?{??
  • ???????????????????Stringstr?=?message.toString();??
  • ???????????????????if(str.trim().equalsIgnoreCase("quit")){??
  • ????????????????????????????session.close(true);??
  • ????????????????????????????return;??
  • ???????????????????}??
  • ???????????????????Calendartime?=?Calendar.getInstance();??
  • ???????????????????SimpleDateFormatdf?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");??
  • ???????????????????session.write(df.format(time.getTime()));??
  • ???????????????????System.out.println("TimeMessage?written...");??
  • ?????????}??
  • ???
  • ?????????@Override??
  • ?????????publicvoid?sessionIdle(IoSession?session,?IdleStatus?status)?throws?Exception?{??
  • ???????????????????System.out.println("IDLE"+session.getIdleCount(status));??
  • ?????????}??
  • ???
  • }??

  • 5、運行MinaTimeServer

    在命令行輸入telnet 127.0.0.1 9123



    服務器端的輸出也可以看到:

    [javascript]?view plaincopyprint?
  • SLF4J:?Failed?to?load?class"org.slf4j.impl.StaticLoggerBinder".??
  • SLF4J:?Defaulting?to?no-operation?(NOP)logger?implementation??
  • SLF4J:?Seehttp://www.slf4j.org/codes.html#StaticLoggerBinder?for?further?details.??
  • Time?Message?written...??
  • Time?Message?written...??
  • Time?Message?written... ?


  • 四、NIO概述

    NIO API是Java 1.4版引入的,NIO的意思是非阻塞的I/O通信。
    要知道Mina的NIO是基于NIO-1開發的,而在JDK 7中引入了NIO-2的庫,但Mina還沒有從NIO-2中獲得各方面的提升,因此Mina還是基于NIO-1的。
    雖然Oracle官方是把NIO的N作為New的解釋,但業界普遍把這個N解釋為Non-Blocking。

    Mina目前分為1.x和2.x兩個主要版本,兩個版本的主要區別在于1.x使用傳統I/O方式,而2.x使用NIO方式。由于NIO是無阻塞的,而傳統IO是阻塞的,所以2.x版本性能會有所提高。但是由于NIO比傳統IO更加難于理解,實現更加復雜,想自己開發基于NIO的高性能服務器難度較大,所以這也是選擇Mina框架的原因。
    Mina 3.x目前還在開發階段,到時候會通過NIO-2進一步提升通信性能。

    java.nio.*包中包含了幾個關鍵的結構:
    1)Buffer:數據的容器
    2)Charset:字節和Unicode編碼的容器轉換器
    3)Channel:封裝了I/O操作的實體的連接表現
    4)Selector:提供了可選擇的、多分復用的非阻塞I/O
    5)Regexps:提供了一些操作正則表達式的工具

    使用Mina的優點:
    1)隱藏了開發網絡程序的復雜性,提供了統一的編程接口;
    - 用Java NIO實現TCP/IP和UDP/IP通信
    - 用RXTX實現RS232串口通信
    - VM級的管道通信
    - 實現自己的傳輸協議

    2)與Servlet相似的過濾器接口,支持擴展

    3)低層和高層API
    - 低層:使用字節緩沖ByteBuffer
    - 高層:使用用戶定義的消息對象和編碼

    4)高可定制的線程模型
    - 單線程
    - 單個線程池
    - 多個線程池(即SEDA)

    5)通過Java 5的SSLEngine實現開箱即用的SSL、TLS和StartTLS

    6)過載防護與流量限制

    7)使用mock對象使用單元可測試性

    8)JMX管理能力

    9)通過StreamIoHandler支持流I/O

    10)可與PicoContainer或Spring框架相集成

    11)可從Mina 1.x和Netty平滑遷移

    五、Mina應用程序架構

    1、基于Mina應用程序的架構

    基于Mina的應用程序的架構通常是這樣的:


    可以看出,Mina是應用程序和網絡層之間的膠水層,可以通過Mina完成TCP、UDP通信,甚至是串口RS-232C通信。Mina屏蔽了網絡編程的復雜性,你只需專心于處理業務邏輯。

    下面我們繼續深入Mina框架:


    廣義上來講,基于Mina的應用程序可以劃分為三層:

    1)I/O Service:I/O服務,執行實際的I/O通信。
    2)I/O Filter Chain:I/O過濾器鏈,把字節過濾/轉換成所需的數據結構,反之亦然。
    3)I/O Handler:I/O句柄,放置實際的業務邏輯。

    因此,要想創建基于Mina的應用程序,你必須:

    1)創建I/O服務
    可選擇已有的服務(*Acceptor)或創建自己的I/O服務。

    2)創建過濾器鏈
    可選擇已有的過濾器或創建自定義的過濾器,用于轉換請求/響應的數據

    3)創建I/O句柄
    寫業務邏輯,處理不同的消息



    總結

    以上是生活随笔為你收集整理的Apache Mina开发手册的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。