M-Push開源消息推送系統(tǒng)Android SDK實現(xiàn)講析

MPUSH開源推送系統(tǒng)官網(wǎng)[https://mpusher.github.io]

前言

  • 對于一個好的推送系統(tǒng),不僅要考慮服務(wù)的性能和穩(wěn)定性,客戶端實現(xiàn)也一樣重要。有時候想寫好客戶端反而更麻煩,比如網(wǎng)絡(luò)部分服務(wù)端可以使用Netty等比較成熟的網(wǎng)絡(luò)組件蘸劈,而客戶端基本要從底層全部要自己實現(xiàn);有時候還要考慮斷線重連以及各種弱網(wǎng)情況疲扎,還有要省電昵时,要保活椒丧,要兼容各種版本問題....

  • 個人覺得好的架構(gòu)設(shè)計一定要簡潔壹甥,每個組件只干自己應(yīng)該干的事情,作為SDK要高度解耦壶熏,只有這樣系統(tǒng)才能更穩(wěn)定不易出錯句柠。

下面簡單分析下MPUSH Android SDK 的實現(xiàn)思路

MPUSH開源推送系統(tǒng)官網(wǎng)[https://mpusher.github.io]

說明

  1. 整個圖非常簡單清晰的分為Server、SDK棒假、BIZ三部分溯职。
  2. MpushClient負責(zé)和server通信,屏蔽網(wǎng)絡(luò)帽哑,協(xié)議谜酒,斷線重連等所有和長鏈接相關(guān)的東西。
  3. MpushService是常駐服務(wù)妻枕,持有MpushClient,并把自身作為MpushClient的ClientListener僻族,監(jiān)聽MpushClient的變化事件。
  4. MpushReceiver主要負責(zé)監(jiān)聽網(wǎng)絡(luò)變化和AlarmManager屡谐,以便暫停和恢復(fù)推送服務(wù)以及健康檢查述么。
  5. 線1表示上行的請求,比如握手愕掏,心跳度秘,綁定用戶,業(yè)務(wù)HTTP代理請求等饵撑。
  6. 線2表示下行響應(yīng)或推送剑梳,比如握手成功唆貌,心跳響應(yīng),HTTP代理響應(yīng)等阻荒。
  7. 線3表示Client下發(fā)的事件挠锥,主要有:鏈接建立/斷開,握手成功侨赡,收到PUSH,設(shè)備被踢下線等事件粱侣,其中PUSH和KICK_USER事件會廣播出去羊壹,由業(yè)務(wù)(MyReceiver)接收;其他事件會通知給MpushReceiver以便其能更好的控制MpushClient的起停齐婴,而MpushService就比較輕量基本沒有什么業(yè)務(wù)邏輯油猫,只負責(zé)維持后臺服務(wù)。
  8. 線4表示由MpushService廣播出去的PUSH消息柠偶,由于采用的是廣播的形式情妖,所有也可以分進程。
  9. 線5表示消息有MyReceiver過濾處理后诱担,轉(zhuǎn)交給業(yè)務(wù)去顯示或存DB等毡证。
  10. 線6表示業(yè)務(wù)可以直接調(diào)用MpushClient提供的接口發(fā)送消息,目前支持的有綁定usreId蔫仙,發(fā)送Http請求等料睛。
  11. 線7表示一些不需要業(yè)務(wù)處理的消息都交由MpuhReceiver處理,比如握手成功后啟動AlarmManager摇邦,當(dāng)鏈接斷開后取消AlarmManager恤煞。
  12. 線8表示MpushReceiver接收到AlarmManager的提醒后去調(diào)用MpshClient的healthCheck方法發(fā)送心跳。
  13. 線9表示MpushReceiver接收到網(wǎng)絡(luò)變化后暫褪┘或恢復(fù)MpushClient居扒,這樣做主要是為了省電,因為在網(wǎng)絡(luò)斷開后丑慎,MpushClient會去嘗試重連而這時候去重連是沒有意義的喜喂,因為沒有網(wǎng)絡(luò)。

MPUSH開源推送系統(tǒng)官網(wǎng)https://mpusher.github.io

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末立哑,一起剝皮案震驚了整個濱河市夜惭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铛绰,老刑警劉巖诈茧,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捂掰,居然都是意外死亡敢会,警方通過查閱死者的電腦和手機曾沈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸥昏,“玉大人塞俱,你說我怎么就攤上這事±艨澹” “怎么了障涯?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長膳汪。 經(jīng)常有香客問我唯蝶,道長,這世上最難降的妖魔是什么遗嗽? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任粘我,我火速辦了婚禮,結(jié)果婚禮上痹换,老公的妹妹穿的比我還像新娘征字。我一直安慰自己,他們只是感情好娇豫,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布匙姜。 她就那樣靜靜地躺著,像睡著了一般锤躁。 火紅的嫁衣襯著肌膚如雪搁料。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天系羞,我揣著相機與錄音郭计,去河邊找鬼。 笑死椒振,一個胖子當(dāng)著我的面吹牛昭伸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播澎迎,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼庐杨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了夹供?” 一聲冷哼從身側(cè)響起灵份,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哮洽,沒想到半個月后填渠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年氛什,在試婚紗的時候發(fā)現(xiàn)自己被綠了莺葫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡枪眉,死狀恐怖捺檬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贸铜,我是刑警寧澤堡纬,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站萨脑,受9級特大地震影響隐轩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渤早,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瘫俊。 院中可真熱鬧鹊杖,春花似錦、人聲如沸扛芽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽川尖。三九已至登下,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叮喳,已是汗流浹背被芳。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留馍悟,地道東北人畔濒。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像锣咒,于是被迫代替她去往敵國和親侵状。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容