1. 程式人生 > >Mina各元件介紹

Mina各元件介紹

Mina各元件介紹
上一篇文章已經系統的介紹了Mina的執行流程,Apache推出的Mina效能上很是高效,上章節我們知道內部有很多的類,各個類之間的依賴也是很多,他們之家都是相互依賴。
下面主要看看各個類中的方法。本篇就當是Mina的文件了。一下總結來源於網路:

IoService

  • 這個介面是服務端IoAcceptor、客戶端IoConnector 的抽象,提供IO 服務和管理IoSession的功能,它有如下幾個常用的方法:
+ <font color="blue">TransportMetadata getTransportMetadata()</font>:

    這個方法獲取傳輸方式的元資料描述資訊,也就是底層到底基於什麼的實現,譬如:nio、apr 等。

+ <font color="blue">void addListener(IoServiceListener listener)</font>:

    這個方法可以為IoService 增加一個監聽器,用於監聽IoService 的建立、活動、失效、空閒、銷燬,具體可以參考IoServiceListener 介面中的方法,這為你參與IoService 的生命週期提供了機會。

+ <font color="blue">void removeListener(IoServiceListener listener)</font>:

    這個方法用於移除上面的方法新增的監聽器。

+ <font color="blue">void setHandler(IoHandler handler)</font>:

    這個方法用於向IoService 註冊IoHandler,同時有getHandler()方法獲取Handler。

+ <font color="blue">Map<Long,IoSession> getManagedSessions()</font>:

    這個方法獲取IoService 上管理的所有IoSession,Map 的key 是IoSession 的id。

+ <font color="blue">IoSessionConfig getSessionConfig()</font>:

    這個方法用於獲取IoSession 的配置物件,通過IoSessionConfig 物件可以設定Socket 連線的一些選項。

IoAcceptor

  • IoAcceptor主要就是bind方法。之前文章已經介紹過了。這裡一帶而過

IoConnector

  • 這個介面是TCPClient 的介面, 主要增加了ConnectFuture connect(SocketAddressremoteAddress,SocketAddress localAddress)方法,用於與Server 端建立連線,第二個引數如果不傳遞則使用本地的一個隨機埠訪問Server 端。這個方法是非同步執行的,同樣的,也可以同時連線多個服務端。

IoSession

  • 這個介面用於表示Server 端與Client 端的連線,IoAcceptor.accept()的時候返回例項。

    • WriteFuture write(Object message)

      用於非同步寫資料

    • CloseFuture close(boolean immediately)

      這個方法用於關閉IoSession,該操作也是非同步的,引數指定true 表示立即關閉,否則就在所有的寫操作都flush 之後再關閉

    • Object setAttribute(Object key,Object value)

      這個方法用於給我們向會話中新增一些屬性,這樣可以在會話過程中都可以使用,類似於HttpSession 的setAttrbute()方法。IoSession 內部使用同步的HashMap 儲存你新增的自
      定義屬性。

    • SocketAddress getRemoteAddress()

      這個方法獲取遠端連線的套接字地址

    • void suspendWrite()

      這個方法用於掛起寫操作,那麼有void resumeWrite()方法與之配對。對於read()方法同樣適用

    • ReadFuture read()

      這個方法用於讀取資料, 但預設是不能使用的, 你需要呼叫IoSessionConfig 的setUseReadOperation(true)才可以使用這個非同步讀取的方法。一般我們不會用到這個方法,因為這個方法的內部實現是將資料儲存到一個BlockingQueue,假如是Server 端,因為大量的Client 端傳送的資料在Server 端都這麼讀取,那麼可能會導致記憶體洩漏,但對於Client,可能有的時候會比較便利

    • IoService getService()

      這個方法返回與當前會話物件關聯的IoService 例項.關於TCP連線的關閉:無論在客戶端還是服務端,IoSession 都用於表示底層的一個TCP 連線,那麼你會發現無論是Server 端還是Client 端的IoSession 呼叫close()方法之後,TCP 連線雖然顯示關閉, 但主執行緒仍然在執行,也就是JVM 並未退出,這是因為IoSession 的close()僅僅是關閉了TCP的連線通道,並沒有關閉Server 端、Client 端的程式。你需要呼叫IoService 的dispose()方法停止Server 端、Client 端

IoSessionConfig

  • 這個方法用於指定此次會話的配置,它有如下常用的方法

    • void setReadBufferSize(int size)

      這個方法設定讀取緩衝的位元組數,但一般不需要呼叫這個方法,因為IoProcessor 會自動調整緩衝的大小。你可以呼叫setMinReadBufferSize()、setMaxReadBufferSize()方法,這樣無論IoProcessor 無論如何自動調整,都會在你指定的區間

    • void setIdleTime(IdleStatus status,int idleTime)

      這個方法設定關聯在通道上的讀、寫或者是讀寫事件在指定時間內未發生,該通道就進入空閒狀態。一旦呼叫這個方法,則每隔idleTime 都會回撥過濾器、IoHandler 中的sessionIdle()方法

    • void setWriteTimeout(int time)

      這個方法設定寫操作的超時時間

    • void setUseReadOperation(boolean useReadOperation)

      這個方法設定IoSession 的read()方法是否可用,預設是false

IoHandler

  • 這個介面是你編寫業務邏輯的地方,從上面的示例程式碼可以看出,讀取資料、傳送資料基本都在這個介面總完成,這個例項是繫結到IoService 上的,有且只有一個例項(沒有給一個IoService 注入一個IoHandler 例項會丟擲異常)。它有如下幾個方法

    • void sessionCreated(IoSession session)

      這個方法當一個Session 物件被建立的時候被呼叫。對於TCP 連線來說,連線被接受的時候呼叫,但要注意此時TCP 連線並未建立,此方法僅代表字面含義,也就是連線的物件IoSession 被建立完畢的時候,回撥這個方法。對於UDP 來說,當有資料包收到的時候回撥這個方法,因為UDP 是無連線的

    • void sessionOpened(IoSession session)

      這個方法在連線被開啟時呼叫,它總是在sessionCreated()方法之後被呼叫。對於TCP 來說,它是在連線被建立之後呼叫,你可以在這裡執行一些認證操作、傳送資料等。對於UDP 來說,這個方法與sessionCreated()沒什麼區別,但是緊跟其後執行。如果你每隔一段時間,傳送一些資料,那麼sessionCreated()方法只會在第一次呼叫,但是sessionOpened()方法每次都會呼叫

    • void sessionClosed(IoSession session)

      對於TCP 來說,連線被關閉時,呼叫這個方法。對於UDP 來說,IoSession 的close()方法被呼叫時才會毀掉這個方法

    • void sessionIdle(IoSession session, IdleStatus status)

      這個方法在IoSession 的通道進入空閒狀態時呼叫,對於UDP 協議來說,這個方法始終不會被呼叫

    • void exceptionCaught(IoSession session, Throwable cause)

      這個方法在你的程式、Mina 自身出現異常時回撥,一般這裡是關閉IoSession

    • void messageReceived(IoSession session, Object message)

      接收到訊息時呼叫的方法,也就是用於接收訊息的方法,一般情況下,message 是一個IoBuffer 類,如果你使用了協議編解碼器,那麼可以強制轉換為你需要的型別。通常我們都是會使用協議編解碼器的, 就像上面的例子, 因為協議編解碼器是TextLineCodecFactory,所以我們可以強制轉message 為String 型別

    • void messageSent(IoSession session, Object message)

      當傳送訊息成功時呼叫這個方法,注意這裡的措辭,傳送成功之後,也就是說傳送訊息是不能用這個方法的。傳送訊息的時機:傳送訊息應該在sessionOpened()、messageReceived()方法中呼叫IoSession.write()方法完成。因為在sessionOpened()方法中,TCP 連線已經真正開啟,同樣的在messageReceived()方法TCP 連線也是開啟狀態,只不過兩者的時機不同。sessionOpened()方法是在TCP 連線建立之後,接收到資料之前傳送;messageReceived()方法是在接收到資料之後傳送,你可以完成依據收到的內容是什麼樣子,決定傳送什麼樣的資料。因為這個介面中的方法太多,因此通常使用介面卡模式IoHandlerAdapter,覆蓋你所感興趣的方法即可

IoBuffer

  • 這個介面是對JAVA NIO 的ByteBuffer 的封裝,這主要是因為ByteBuffer 只提供了對基本資料型別的讀寫操作,沒有提供對字串等物件型別的讀寫方法,使用起來更為方便,另外,ByteBuffer 是定長的,如果想要可變,將很麻煩。IoBuffer 的可變長度的實現類似於StringBuffer。IoBuffer 與ByteBuffer 一樣,都是非執行緒安全的。本節的一些內容如果不清楚,可以參考java.nio.ByteBuffer 介面。這個介面有如下常用的方法

    • static IoBuffer allocate(int capacity,boolean useDirectBuffer)

      這個方法內部通過SimpleBufferAllocator 建立一個例項,第一個引數指定初始化容量,第二個引數指定使用直接緩衝區還是JAVA 記憶體堆的快取區,預設為false

    • void free()

      釋放緩衝區,以便被一些IoBufferAllocator 的實現重用,一般沒有必要呼叫這個方法,除非你想提升效能(但可能未必效果明顯)

    • IoBuffer setAutoExpand(boolean autoExpand)

      這個方法設定IoBuffer 為自動擴充套件容量,也就是前面所說的長度可變,那麼可以看出長度可變這個特性預設是不開啟的

    • IoBuffer setAutoShrink(boolean autoShrink)

      這個方法設定IoBuffer為自動收縮,這樣在compact()方法呼叫之後,可以裁減掉一些沒有使用的空間。如果這個方法沒有被呼叫或者設定為false,你也可以通過呼叫shrink()方法手動收縮空間

    • IoBuffer order(ByteOrder bo)

      這個方法設定是Big Endian 還是Little Endian,JAVA 中預設是Big Endian,C++和其他語言一般是Little Endian

    • IoBuffer asReadOnlyBuffer()

      這個方法設定IoBuffer 為只讀的

    • Boolean prefixedDataAvailable(int prefixLength,int maxDataLength)

      這個方法用於資料的最開始的1、2、4 個位元組表示的是資料的長度的情況,prefixLentgh表示這段資料的前幾個位元組(只能是1、2、4 的其中一個),代表的是這段資料的長度,maxDataLength 表示最多要讀取的位元組數。返回結果依賴於等式remaining()-prefixLength>=maxDataLength,也就是總的資料-表示長度的位元組,剩下的位元組數要比打算讀取的位元組數大或者相等

    • String getPrefixedString(int prefixLength,CharsetDecoder decoder)

      如果上面的方法返回true,那麼這個方法將開始讀取表示長度的位元組之後的資料,注意要保持這兩個方法的prefixLength 的值是一樣的。G、H兩個方法在後面講到的PrefixedStringDecoder 中的內部實現使用。IoBuffer 剩餘的方法與ByteBuffer 都是差不多的,額外增加了一些便利的操作方法,例如:IoBuffer putString(String value,CharsetEncoder encoder)可以方便的以指定的編碼方式儲存字串、InputStream asInputStream()方法從IoBuffer 剩餘的未讀的資料中轉為輸入流等

IoFuture

  • 在Mina的很多操作中,你會看到返回值是XXXFuture,實際上他們都是IoFuture的子類,看到這樣的返回值,這個方法就說明是非同步執行的,主要的子類有ConnectFuture、CloseFuture 、ReadFuture 、WriteFuture 。這個介面的大部分操作都和java.util.concurrent.Future介面是類似的,譬如:await()、awaitUninterruptibly()等,一般我們常用awaitUninterruptibly()方法可以等待非同步執行的結果返回。這個介面有如下常用的方法

    • IoFuture addListener(IoFutureListener<?> listener)

      這個方法用於新增一個監聽器, 在非同步執行的結果返回時監聽器中的回撥方法operationComplete(IoFuture future),也就是說,這是替代awaitUninterruptibly()方法另一種等待非同步執行結果的方法,它的好處是不會產生阻塞

    • IoFuture removeListener(IoFutureListener<?> listener)

      這個方法用於移除指定的監聽器

    • IoSession getSession()

      這個方法返回當前的IoSession。舉個例子,我們在客戶端呼叫connect()方法訪問Server 端的時候,實際上這就是一個非同步執行的方法,也就是呼叫connect()方法之後立即返回,執行下面的程式碼,而不管是否連線成功。那麼如果我想在連線成功之後執行一些事情(譬如:獲取連線成功後的IoSession物件),該怎麼辦呢?按照上面的說明,你有如下兩種辦法:

加入戰隊

# 加入戰隊

微信公眾號

主題

加入戰隊

# 加入戰隊

微信公眾號

相關推薦

Mina元件介紹

Mina各元件介紹 上一篇文章已經系統的介紹了Mina的執行流程,Apache推出的Mina效能上很是高效,上章節我們知道內部有很多的類,各個類之間的依賴也是很多,他們之家都是相互依賴。 下面主要看看各個類中的方法。本篇就當是Mina的文件了。一下總結來源於網路: IoService 這個介面是服務端IoA

openstack元件介紹

經常有朋友讓我介紹Openstack,我就乾脆寫一篇Openstack的元件介紹,也算是總結一下。馬上2012年就要結束了,也是到該總結的時候。去年現在的Openstack,其實官方的Keystone和Horizon還沒法很好的一起工作。 我個人的理解:下面的元件全部

vmware horizon 6.0搭建-(一、元件的簡單介紹

vmware horizon 6.0主要由以下幾個功能模組組成: 1.Microsoft Active Directory:對使用者進行身份驗證和管理。 2.Vmware Vcenter Server:對物理主機和虛擬機器進行管理。 3.Vmware Horizon view

EasyDarwin流媒體平臺功能元件介紹

EasyDarwin單平臺部署 很多人一直分不清楚EasyDarwin團隊開發的一堆Easy開頭的專案各自都是幹什麼的,怎麼配合工作的。這裡做個簡單的介紹: EasyDarwin:開源RTSP流媒體伺服器。 EasyPusher是支援各種平臺的RTSP推流

畫畫一樣開發軟件 顯示元件介紹-總述

軟件開發;管理軟件開發;無代碼管理軟件無代碼開發顯示元件介紹-總述 開發工具中的顯示元件對應的是用戶前端設計部分,默認分為模板顯示元件和元件選項板中的顯示元件兩部分,第一部分是新建一個項目時自動生成的最底層的顯示塊,如我們新建時選新移動應用模板時,自動生成三個顯示塊:手機端顯示塊、平板端顯示塊和電腦端顯示塊:

TERSUS畫畫一樣開發軟件 顯示元件介紹-容器類顯示元件

軟件開發;管理軟件開發;無代碼軟件開發TERSUS無代碼手機電腦管理類軟件開發,其中可拖放使用的容器類顯示元件包括:內容顯示塊(Pane)元件、行顯示元件(Row)、列顯示元件(Column)、工具欄元件(Tool bar)、組合元件(Group) 內容顯示塊(Pane)元件:是一個顯示容器,可以做為一個顯示

TERSUS畫畫一樣開發軟件 顯示元件介紹-按鈕類顯示元件

軟件開發;無代碼軟件開發;管理軟件開發TERSUS無代碼手機電腦管理類軟件開發,其中可拖放使用的按鈕類顯示元件包括:按鈕(Button)元件、按鈕組(Button Group)元件。 按鈕(Button)元件:用戶在前端可以直接看到一個帶名稱的按鈕,點擊後可執行一個邏輯處理的元件,其默認的結構如下圖,是開發時

TERSUS畫畫一樣開發軟件 顯示元件介紹-圖片圖標類顯示元件

軟件開發 管理 軟件開發 TERSUS無代碼手機電腦管理類軟件開發,其中可拖放使用的圖片圖標類顯示元件包括:圖片顯示元件(Image)、通用顯示塊元件(HTML Tag)。 圖片顯示元件(Image):顯示圖片用,直接指定所要顯示的圖片的地址,在屬性中定義圖片樣式即可。 1、圖片源文件可以是項目文

TERSUS畫畫一樣開發軟件 顯示元件介紹-輸入框類顯示元件

軟件開發管理軟件無代碼軟件開發無代碼手機電腦管理類軟件開發,其中可拖放使用的輸入框類顯示元件包括:字符輸入框元件(Text Field)、多行文本輸入框元件(Text Area)、密碼輸入框元件(Password Field)、數字輸入框元件(Number Field)、日期輸入框元件(Date Field)

TERSUS畫畫一樣開發軟件 顯示元件介紹-勾選類顯示元件

軟件開發;管理軟件開發;無代碼軟件開發TERSUS無代碼手機電腦管理類軟件開發,其中可拖放使用的勾選類顯示元件包括:勾選框元件(Check Box)、帶標簽勾選框元件(Check Box with label)、放射效果多選項按鈕元件(Radio Button Group)、放射效果單項勾選元件(Radio

TERSUS畫畫一樣開發軟件 顯示元件介紹-上傳顯示元件

軟件開發管理軟件無代碼軟件開發TERSUS無代碼手機電腦管理類軟件開發,其中上傳類顯示元件包括:表單元件(Form)、文件上傳框元件(File Field) 表單元件(Form):是一個提交信息的元件,類似一個輸入框套嵌的容器,可以點右鍵添加4類帶標簽的輸入框元件,隨意添加多個,然後再定義各元件的顯示樣式即即

TERSUS畫畫一樣開發軟件 顯示元件介紹-常量及鏈接顯示元件

軟件開發管理軟件無代碼軟件開發TERSUS無代碼手機電腦管理類軟件開發,其中包括務類常量顯示和鏈接顯示元件:字符顯示元件(Text Display)、數字顯示元件(Number Display)、日期顯示元件(Date Display)、時間顯示元件(Date and Time Display)、鏈接顯示元件

TERSUS畫畫一樣開發軟件 顯示元件介紹-列表顯示元件

軟件開發;管理軟件;無代碼軟件開發TERSUS無代碼手機電腦管理類軟件開發,其中專用於手機或平板端的重復類信息顯示的元件:列表或清單元件(List) 列表或清單(List)元件:是一個容器類的元件,當有一組多個信息需要顯示在一塊區域且多組排列顯示時用。多用於手機和平板端。比如常用的應用中,手機查看店中上架的零

TERSUS畫畫一樣開發軟件 顯示元件介紹-子頁面及彈窗顯示元件

軟件開發;管理軟件;無代碼軟件開發TERSUS無代碼手機電腦管理類軟件開發,其中窗口類顯示元件包括:子頁面元件(Page Dialog)、彈窗顯示元件(Modal Dialog) 子頁面元件(Page Dialog):是手機和平板移動端設計時所用到的新頁面元件,移動端是由各個頁面所組成的,在按鈕等元件中放置一

TERSUS畫畫一樣開發軟件 顯示元件介紹-表格顯示元件

無代碼件開發;管理軟件;軟件開發TERSUS無代碼手機電腦管理類軟件開發,其中表格顯示元件包括:簡單表格顯示元件(Simple Table)、復雜表格顯示元件(Table) 簡單表格顯示元件(Simple Table):是一個簡單的二維固定樣式表格元件,其中只有一個顯示列的數據結構是可以變更的,默認有一個日期

TERSUS畫畫一樣開發軟件 顯示元件介紹-分頁面及左右欄顯示元件

軟件開發 管理 軟件開發 TERSUS無代碼手機電腦管理類軟件開發,其中頁面框架設計的顯示元件包括:分頁面顯示元件(Tabbed Pane)、左右可調大小兩欄顯示元件(Split Pane) 分頁面顯示元件(Tabbed Pane):是一個含多個顯示頁面的容器,每個頁面以一個橫放欄位的形式出現,默

TERSUS畫畫一樣開發軟件 顯示相關處理元件介紹-提示行為元件

軟件開發 無代碼 管理 TERSUS無代碼手機電腦管理類軟件開發,其中提示行為類元件包括:提示框(Alert)元件、確認信息框(Confirm)元件及退出提示框(Set Unload Confirmation)元件 提示框(Alert)元件:是用於在用戶前端界面彈出一個顯示框顯示一個提示信息,一般

TERSUS畫畫一樣開發軟件 顯示相關處理元件介紹-頁面行為元件1

軟件開發;管理軟件;無代碼軟件開發TERSUS無代碼手機電腦管理類軟件開發,其中頁面處理行為類元件包括:向前一頁(Forward)元件、後退(Back)元件、跳轉頁面(Go to URL)元件、帶參數的跳轉(Create Location)頁面地址生成元件、獲取頁面參數(Get View Parameters

TERSUS畫畫一樣開發軟件 顯示相關處理元件介紹-頁面行為元件2

軟件開發;管理軟件;無代碼軟件TERSUS無代碼手機電腦管理類軟件開發,其中頁面處理行為類元件還包括:關閉頁面(Close Window)元件、刷新頁面內容(Refresh)元件 關閉頁面(Close Window)元件:這個功能主要用於關閉當前打開的窗口或頁面,顯示前一個頁面,比如在彈窗元件中,右上角是一個

TERSUS畫畫一樣開發軟件 顯示相關處理元件介紹-對象的行為元件

軟件開發;管理軟件;無代碼軟件TERSUS無代碼手機電腦管理類軟件開發,其中對顯示對象的處理行為元件包括:定位光標(Focus)元件、刪除元件(Delete Element)元件、過程中的時間選取(Prompt Date)元件、獲取元件名稱(Get Element Name)元件、獲取父層對象(Get Par