Android中長連接的實(shí)現(xiàn)方式

首先是看到其他一篇博客上的一段直接摘錄過來:

一般而言長連接已經(jīng)是App的標(biāo)配了,推送功能的實(shí)現(xiàn)基礎(chǔ)就是長連接,當(dāng)然了我們也可以通過輪訓(xùn)操作實(shí)現(xiàn)推送功能,但是輪訓(xùn)一般及時(shí)性比較差,而且網(wǎng)絡(luò)消耗與電量銷毀比較多,因此一般推送功能都是通過長連接實(shí)現(xiàn)的。

那么如何實(shí)現(xiàn)長連接呢?現(xiàn)在一般有這么幾種實(shí)現(xiàn)方式:

  • 使用第三方的長連接服務(wù);

  • 通過NIO等方案實(shí)現(xiàn)長連接服務(wù);

  • 通過MINA等第三方框架實(shí)現(xiàn)長連接;

幾種長連接服務(wù)的具體實(shí)現(xiàn),以及各自的優(yōu)缺點(diǎn)。

1. 使用第三方的長連接服務(wù)

介紹:這是最簡單的方式,我們可以通過接入極光推送,百度推送,友盟等第三方服務(wù)實(shí)現(xiàn)長連接,通過接入第三方的API我們可以很方便的接入第三方的長連接,推送服務(wù),但是這種方式定制化程度不太好,如果對長連接服務(wù)不是要求特別高,對定制化要求不是很高的話基本可以考慮這種方式(目前主流的App都是使用第三方的長連接服務(wù))
優(yōu)勢:簡單,方便
劣勢:定制化程度不高

2. 使用NIO等方案實(shí)現(xiàn)長連接服務(wù)

介紹:通過NIO的方式實(shí)現(xiàn)長連接,這種方式對技術(shù)要求程度比較高,基本都是通過java API實(shí)現(xiàn)長連接,實(shí)現(xiàn)心跳包,實(shí)現(xiàn)異常情況的容錯等操作,可以說通過NIO實(shí)現(xiàn)長連接對技術(shù)要求很高,一般如果沒有成行的技術(shù)方案比建議這么做,就算實(shí)現(xiàn)了長連接,后期連接的維護(hù),對電量,流量的損耗等都需要持續(xù)的優(yōu)化。
優(yōu)勢:定制化比較高
劣勢:技術(shù)要求高,需要持續(xù)的維護(hù)

3. 使用MINA等第三方框架實(shí)現(xiàn)長連接

介紹:MINA是一個(gè)第三方的NIO框架,該框架實(shí)現(xiàn)了一整套的長連接機(jī)制,包括長連接的建立,心跳包的實(shí)現(xiàn),異常機(jī)制的容錯等。使用MINA實(shí)現(xiàn)長連接可以定制化的實(shí)現(xiàn)一些特有的功能,并且比NIO方案較為簡單,因?yàn)槠湟呀?jīng)封裝了一些長連接的特有機(jī)制,比如心跳包,容錯等。
優(yōu)勢:可定制,較NIO方法簡單
劣勢:也需要一定的技術(shù)儲備

長連接具體實(shí)現(xiàn)

在我們的Android客戶端中長連接的實(shí)現(xiàn)機(jī)制采用–MINA方式。這里多說一句,一開始的長連接采用的是NIO方案,但是采用這種方案之后踩了很多坑,包括心跳,容錯等機(jī)制都是自己寫的,所以耗費(fèi)了大量的時(shí)間,而且對手機(jī)電量的消耗很大,最后決定使用MINA NIO框架重新實(shí)現(xiàn)一遍長連接,后來經(jīng)過實(shí)測,長連接的穩(wěn)定性還有耗電量,流量的消耗等指標(biāo)方面有了很大的提高。

下面我將簡單的介紹一下通過NIO實(shí)現(xiàn)長連接的具體流程:

  • 引入MINA jar包,在App啟動頁面,登錄頁面啟動長連接;

  • 創(chuàng)建后臺服務(wù),在服務(wù)中創(chuàng)建MINA長連接;

  • 實(shí)現(xiàn)心跳包,重寫一些容錯機(jī)制;

  • 實(shí)現(xiàn)長連接斷了之后的重連機(jī)制,并且重連次數(shù)有限制不能一直重連;

  • 長連接斷了之后實(shí)現(xiàn)輪訓(xùn)操作,這里的輪訓(xùn)服務(wù)只有在長連接斷了之后才啟動,在長連接恢復(fù)之后關(guān)閉;

在剛開始接觸Mina的時(shí)候呢,看到了郭神在imooc上的andorid推送的教學(xué)視頻,也是采用了Mina框架。

簡單說下Mina的優(yōu)勢:

1、非常適合C/S架構(gòu)的通信項(xiàng)目
2、Apache出品的開源項(xiàng)目,值得信賴
3、官網(wǎng)上有詳細(xì)的資料供開發(fā)者學(xué)習(xí)
4、使用起來非常簡單,降低學(xué)習(xí)成本。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文中我們將講解一下App的長連接實(shí)現(xiàn)。一般而言長連接已經(jīng)是App的標(biāo)配了,推送功能的實(shí)現(xiàn)基礎(chǔ)就是長連接,當(dāng)然了我...
    猿萬閱讀 4,902評論 1 11
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,733評論 25 709
  • Netty的簡單介紹 Netty 是一個(gè) NIO client-server(客戶端服務(wù)器)框架,使用 Netty...
    AI喬治閱讀 8,599評論 1 101
  • 城東閑游 借問池臺主,多居要路津。 千金買絕境,永日屬閑人。 竹徑縈紆入,花林委曲巡。 斜陽眾客散,空鎖一池春。 ...
    古風(fēng)長歌閱讀 580評論 2 2
  • 突然感覺自己腦子忽然開竅了,比如我之前一直在聽秋水老師的《知識管理》,也沒有用,也買了一本她寫的《有道云,記錄更好...
    女王雪兒閱讀 211評論 0 1

友情鏈接更多精彩內(nèi)容