IoService
IoService是一個接口
IoAcceptor
主要用於創建新的連接
NioSocketAcceptor
NioDatagramAcceptor : 無阻塞的Socket 傳輸Acceptor
AprSocketAcceptor : 阻塞的Socket 傳輸Acceptor
VmPipeSocketAcceptor : the in
IoConnector
針對Client端的Socket連接
NioSocketConnector : 無阻塞的Socket 傳輸Connector
NioDatagramConnector : 無阻塞的Socket 傳輸Connector
AprSocketConnector : 阻塞的Socket 傳輸Connector
ProxyConnector : 一個支持代理服務的 Connector
SerialConnector : 針對串口傳輸的Connector
VmPipeConnector : the in
Session
任何時候只要有新的連接到來
Session有一系列狀態
Connected : session被創建
Idle : session至少在一個空閒周期(見配置)內沒有處理過任何請求
Idle for read : 在一個空閒周期內沒有做實際的讀操作
Idle for write : 在一個空閒周期內沒有做實際的寫操作
Idle for both : 在一個空閒周期內沒有做實際的讀和寫操作
Closing :session正在被關閉
Closed : session已經被關閉
IoBuffer
IoBuffer是MINA內部使用的一個byte buffer
基本用法
由於IoBuffer是對Nio的ByteBuffer 的封裝
下面通過一個例子來說明
i
此時position為
ii
iii
iiii
iv
因為IoBuffer是一個抽象類
allocate有兩種定義
這裡
capacity
direct
direct buffer和heap buffer的區別分析
Direct Buffer不是分配在堆上的
它不被GC直接管理(但Direct Buffer的JAVA對象是歸GC管理的 只要GC回收了它的JAVA對象 操作系統才會釋放Direct Buffer所申請的空間) 它似乎給人感覺是 內核緩沖區(buffer in kernel) Heap Buffer則是分配在堆上的 或者我們可以簡單理解為Heap Buffer就是byte[]數組的一種封裝形式 當我們把一個Heap Buffer寫入Channel的時候 實際上底層實現會先構建一個臨時的Direct Buffer 然後把Heap Buffer的內容復制到這個臨時的Direct Buffer上 再把這個Direct Buffer寫出去 因此把一個Direct Buffer寫入一個Channel的速度要比把一個Heap Buffer寫入一個Channel的速度要快 但是Direct Buffer創建和銷毀的代價很高 所以要用在盡可能重用的地方
public static IoBuffer allocate(int capacity)的用法
IoBuffer允許生成一個自動擴展的buffer(這也是沒有選擇使用NIO的ByteBuffer的原因之一)
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26980.html