APP項目開發(fā)后臺怎樣實現(xiàn)推送服務(wù)?
推送服務(wù)已經(jīng)成了App必不可少的服務(wù)。架設(shè)推送服務(wù)除了可以使用第三方服務(wù)外,也有大量的開源技術(shù)可以選擇。現(xiàn)在推送服務(wù)主要分兩塊:Android推送和iOS推送,深圳APP開發(fā)公司針對這兩塊分別講述其架構(gòu)。
APP開發(fā)推送服務(wù)功能之Android推送
Android手機(jī)由于Audroid系統(tǒng)沒有限制,當(dāng)App進(jìn)入了后臺也能運行服務(wù),所以Android可以基于長連接作推送,這就決定了Android的推送后臺和一般基于HTTP的App后臺是不一樣的,從技術(shù)細(xì)節(jié)上,架構(gòu)上也不一樣。自主研發(fā)推送軟件對一般的開發(fā)者來說有很大的難度,幸運的是現(xiàn)在有開源軟件可以實現(xiàn)推送。下面以APP開發(fā)公司工程師研究過的開源推送軟件“Gopush-Cluster”為例,說明Android推送服務(wù)器的架構(gòu)。
Gopush-Cluster是由措豹移動開源的推送軟件,已經(jīng)被廣泛應(yīng)用于措豹移動下面的業(yè)務(wù)
·微看、獵豹瀏覽器熱劇推薦,追劇提示;
·游戲的游戲活動推送;
·手機(jī)助手App推薦,廣告;
·電池醫(yī)生實時推薦、求生手冊的實時消息
·PC毒霸的指令下發(fā)(Web換膚,升級提示)、漏洞泡泡等
·PC手機(jī)助手實時游戲、廣告推薦;
·PC獵豹瀏覽器上WEB。
APP開發(fā)推送功能Gopush-Cluster的架構(gòu)如圖l9-36所示
APP開發(fā)推送功能9-36 Gopush-Cluster的架構(gòu)圖
主要分為四個模塊來開發(fā):Comet、Message、Web、third-part
Comet的職責(zé)
主要負(fù)責(zé)消息的推送,維護(hù)客戶端連接。消息是有唯一id號,這個id號是依次自增的。當(dāng)消息推送后需要在隊列中排隊,通過PRC傳遞到Message模塊中實現(xiàn)消息的存儲。這個模塊是有狀態(tài)的。
Message的職責(zé)
主要負(fù)責(zé)消息的存取。當(dāng)Message模塊接收到Comet模塊消息存儲的RPC(遠(yuǎn)程過程調(diào)用仂議)請求后把消息持久化(目前開源版本的消息持久化支持MySQL和Redis),同時接收來自Web模塊的獲取離線消息的請求。這個模塊是無狀態(tài)的,因此可以部署多個Message節(jié)點來應(yīng)對Comet模塊的請求和VVeb模塊的請求壓力。
web的職責(zé)
主要負(fù)責(zé)節(jié)點的詢問(獲取有效的Comet節(jié)點IP地址給客戶端連接)、獲取離線消息、后臺節(jié)點的管理。節(jié)點詢問是根據(jù)用戶的Key使用一致性hash算法計算出該Key應(yīng)該連接到哪個Comet節(jié)點,使用這種策略可以使海量用戶均衡地分布到多個Comet節(jié)點,提高系統(tǒng)的并發(fā)能力獲取離線消息時,該模塊發(fā)送RPC請求到Message節(jié)點,獲取在持久化設(shè)備上的信息。這個模塊是無狀態(tài)的,可以用多個Web節(jié)點實現(xiàn)負(fù)載均衡和高可用。
thrid-part的職責(zé)
系統(tǒng)還使用了Zookeeper實現(xiàn)一個Comet的故障移除和高可用。例如,Comet節(jié)點l可以有一個備用節(jié)點2節(jié)點l在Zookeeper注冊為主節(jié)點,當(dāng)節(jié)點l宕機(jī)后,Zookeeper會選舉節(jié)點2為可用的節(jié)點來提供服務(wù)。下面以推送服務(wù)中的3個常用場景為例來說明Gopush的工作流程
1.App連接推進(jìn)服務(wù)器的流程
(1)App向web模塊發(fā)送獲取Comet服務(wù)器ip的請求
http://test.com/1/server/get?key=Terry22&proto=1
上面各個參數(shù)的含義如下。
key:每個App客戶端的標(biāo)識,在Gopush中這個key是允許重復(fù)的,因此可實現(xiàn)同賬號的多設(shè)備登錄。這里該App的key是“Terry22”proto,通信所使用的協(xié)議.1表示使用WebSocket協(xié)議,2表示使用TCP協(xié)議。
(2) Web模塊從Zookeeper中獲取有效的Comet模塊信息,并根據(jù)一致性hash算法(一致性hash算法的描述請查看本本站緩存架構(gòu)的演進(jìn)”這節(jié)中的描述)得到該Key應(yīng)該連接的Comet模塊,返回下面的JSON數(shù)據(jù)給App。
{"ret:0,"
"data":
"server": "183.54.1.1:8065" //IP:Port
}
(3) App從返回的JSON數(shù)據(jù)中得到Comet模塊的IP,使用Comet模塊的協(xié)議格式連接到Comet模塊,這樣App就成功連接了推送服務(wù)器App連接推送服務(wù)器的流程如圖9-37所示。
好了,APP開發(fā)公司本文關(guān)于APP項目開發(fā)后臺怎樣實現(xiàn)推送服務(wù)的實操經(jīng)驗分享就到這里,謝謝關(guān)注,博納網(wǎng)絡(luò)編輯整理。