推送的實現方式:
一:客戶端不斷的查詢伺服器,檢索新內容,也就是所謂的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...