天天看點

Apache Mina開發手冊之二

<b>Apache Mina開發手冊之二</b>

<b>四、NIO概述</b>

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平滑遷移

<b>五、Mina應用程式架構</b>

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

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

Apache Mina開發手冊之二

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

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

Apache 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句柄

寫業務邏輯,處理不同的消息