客戶端與服務端長連線Mina框架講解

2021-08-09 21:40:02 字數 3726 閱讀 9181

推送的實現方式:

一:客戶端不斷的查詢伺服器,檢索新內容,也就是所謂的pull 或者輪詢方式。太慢可能導致某些訊息的延遲,如果太快,則會大量消耗網路頻寬和電池。

三:客戶端和伺服器之間維持乙個tcp/ip長連線,伺服器向客戶端

push。

mina這個框架的優點:

– 非同步

– 無阻塞

– 事件驅動

– 支援

tcp, udp, apr,

串列埠…

– 通過 過濾器(

filters

)實現擴充套件性

– 同時提供協議框架

一、在我們工程中使用了mina框架之後,我們的工程結構可分為三層:

首先是我們的最上層

然後我們應用層要和伺服器進行通訊的時候,呼叫我們的mina模組,然後我們的

mina

模組會根據我們的配置來去選擇走

tcp協議還是

udp協議,還是我們的串列埠協議。

二、mina內部工作原理:

遠端伺服器與我們的客戶端通過ioservice建立連線以後就會得到乙個

session

,然後遠端伺服器就會發資料到我們的

session

,然後我們的

session

會將我們的資料傳送到我們的

iofilterchain

,也就是我們的過濾鏈中,過濾鏈會對我們的資料進行過濾,直到將符合條件的資料傳到

應用層裡,然後我們的客戶端要做的是在

iohandler

中完成對資料的操作,比如說我們要更新我們的

ui,或者要儲存資料庫等等。

從這裡可以看到我們客戶端與伺服器進行通訊的時候只要經歷3個步驟,

首先伺服器將資料傳送到session中

session將資料傳送到過濾鏈中

過濾鏈將資料過濾以後,最後才將它傳送到我們的客戶端中。

三、mina核心類:

其實它是乙個介面

它的職責:監聽的管理、iohandler的管理、

iosession

的管理等等。

它有乙個子類:abstractioservice:這個子類主要實現一些預設的方法,或者一些預設的成員變數。比如新增預設的過濾鏈、以及預設的

handler

,以及預設的執行緒池等等。

2、服務端最重要的乙個類ioacceptor:

首先繼承了

ioservice

,然後又有兩個介面繼承

ioacceptor

,分別是

socketacceptor

和dategramacceptor

,兩個介面分別支援

tcp、

udp協議,而最終實現他們的是

niosocketacceptor

和niodategramacceptor

,這兩個是我們程式設計中經常要用到的,乙個呢就是真正

tcp協議的***,另乙個就是真正

udp協議的***。

ioconnector也是繼承了

ioservice

介面,然後同樣也是兩個介面實現了

ioconnector

,分別是

dategramconnector

和socketconnector

。兩個也是乙個支援

tcp協議,乙個支援

udp協議。最終的實現類也是

niosocketconnector

和niodategramconnector

。分別與伺服器進行連線。

4、filter及其相關子類

下面介紹幾個比較重要的filter:

1) loggingfilter記錄

mina

所有日誌。包括我們與伺服器連線、斷開;訊息的傳送和接收,等等所有的日誌。

2) protocolcodecfilter資料轉化過濾器。比如定義我們與伺服器通訊是哪一種型別的資料,如果我們是物件型別的,那麼基本型別的就會被過濾掉,進而節省我們資料的傳遞。

3) compressionfilter資料壓縮過濾器。我們都知道我們的

協議是支援 壓縮的,而我們的

mina

也支援我們的資料壓縮,可以提高資料的傳輸效率。

4) sslfilter資料加密過濾器。大家知道我們的

之所以支援加密傳輸,就是因為它在

協議和tcp

協議中間增加了一層

ssl協議,這層協議主要負責加密和解密資料,而我們的

mina

也支援通過我們的

ssl協議對資料進行加密和解密。

5、ioseeion類:

ioseeion類與通訊密切相關,它是乙個狀態機。首先我們與伺服器進行連線的時候,如果狀態變為

connected

連線建立,

mina

就會為我們返回乙個

ioseeion

類的物件,通過我們的

iosession

類我們就可以

write

、read

資料到我們的伺服器;如果我們不想讀寫的時候,我們也可以

close

掉我們的

iosession。

iosession還有的一些功能,比如:

1)receive buffer size設定接收資料快取區的大小。主要是防止記憶體溢位。

2)sending buffer size設定資料傳送快取區的大小。主要是防止記憶體溢位。

3)idel time設定狀態恢復時間。在經過過久時間不讀也不寫的時候,我們的

session

會自動進入空閒狀態。

4)write timeout設定寫資料超時時間。

6、handler類

handler是應用層比較重要的乙個類,我們所有的業務邏輯都要在

handler

中完成,

handler

中主要負責監聽

sessioncreated/sessionopen/sessionclosed

事件的監聽,以及

messagereceived/messagesend

事件的監聽,以及異常

exceptioncaught

事件的監聽。

Mina框架 Android客戶端長連線,斷線重連

1.先建立乙個minaservice,在裡面配置niosocketconnector,建立客戶端ioclienthandler connector new niosocketconnector connector.setconnecttimeoutmillis connectutils.timeou...

C 服務端與客戶端

c 服務端與客戶端連線實現的由來 那麼既然乙個伺服器端口可以應對多個客戶端連線,那麼接下來我們就看一下,如何讓多個客戶端與服務端連線。如同我們上面所說的,乙個tcpclient就是乙個socket,所以我們只要建立多個tcpclient,然後再呼叫connect 方法就可以了 c 服務端與客戶端連線...

服務端與客戶端互動

搭建伺服器 伺服器端 using system.net.sockets using system.net using system.io using system.text namespace sockerservice endpoint point new ipendpoint ipaddress...