分布式推送服務(wù)器系統(tǒng)及應(yīng)用該系統(tǒng)的數(shù)據(jù)推送方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)服務(wù)器架構(gòu)技術(shù)領(lǐng)域,尤其涉及一種分布式推送服務(wù)器系統(tǒng)及應(yīng)用該系統(tǒng)的數(shù)據(jù)推送方法。
【背景技術(shù)】
[0002]隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,我們已經(jīng)見(jiàn)過(guò)一些令人驚嘆不己的微信、滴滴打車(chē)、大黃峰等優(yōu)秀應(yīng)用軟件,它們的應(yīng)用首先是需要信息的高實(shí)時(shí)性,更高的準(zhǔn)確和到達(dá)率,再者是服務(wù)器系統(tǒng)需要承載更大的并發(fā)量,具有更好的伸縮性以及可靠性,才能保證整體服務(wù)的信息安全、連續(xù)、可共享、易整合和高可用。它們的這些應(yīng)用都采應(yīng)了 push技術(shù)。push技術(shù)本身存在非常廣泛的應(yīng)用需求,特別適用于聊天、租車(chē)、天氣預(yù)報(bào)、股票軟件等移動(dòng)互聯(lián)網(wǎng)應(yīng)用。
[0003]現(xiàn)有push框架不夠成熟,實(shí)現(xiàn)原理各自不同,沒(méi)有統(tǒng)一的實(shí)現(xiàn)標(biāo)準(zhǔn),使的開(kāi)發(fā)的應(yīng)用程序很難得到移植。現(xiàn)有的解決方法有兩種:一種是采用openfire開(kāi)源組件,一種是基于http長(zhǎng)輪詢(xún)實(shí)現(xiàn)。
[0004]openfire采用Java開(kāi)發(fā),開(kāi)源的實(shí)時(shí)協(xié)作(RTC)服務(wù)器基于XMPP (Jabber)協(xié)議,使用它可以輕易的構(gòu)建高效率的即時(shí)通信服務(wù)器.但缺點(diǎn)也顯而易見(jiàn)openfire單機(jī)承載量有限,xmpp協(xié)議數(shù)據(jù)負(fù)載太重,不能提供二進(jìn)制數(shù)據(jù)支持。
[0005]http長(zhǎng)輪詢(xún)實(shí)現(xiàn)方式的原理是客戶端不斷的向服務(wù)器發(fā)送請(qǐng)求以獲取最新的數(shù)據(jù)信息,http長(zhǎng)輪詢(xún)實(shí)現(xiàn)方式對(duì)于服務(wù)端和客戶端實(shí)現(xiàn)相對(duì)簡(jiǎn)單,編寫(xiě)比較容易,所以開(kāi)發(fā)人員維護(hù)成本相對(duì)比較低,適用于小型應(yīng)用。
[0006]http長(zhǎng)輪詢(xún)的工作流程如下:
[0007]1、輪詢(xún)的建立:客戶端發(fā)起http請(qǐng)求建立連接,此時(shí)由于服務(wù)器還未做出應(yīng)答,所以HTTP也一直處于連接狀態(tài)中。
[0008]2、數(shù)據(jù)的推送:在客戶端循環(huán)過(guò)程中,服務(wù)器程序?qū)蛻舳岁P(guān)注的數(shù)據(jù)變動(dòng)進(jìn)行監(jiān)控,如發(fā)現(xiàn)更新,將該信息輸出給瀏覽器,隨即斷開(kāi)連接,完成應(yīng)答過(guò)程,實(shí)現(xiàn)“服務(wù)器推”。
[0009]3.輪詢(xún)的終止:輪詢(xún)可能在以下2種情況時(shí)終止
[0010]3.1.有新數(shù)據(jù)推送
[0011]當(dāng)循環(huán)過(guò)程中服務(wù)器向客戶端推送信息后,應(yīng)該主動(dòng)結(jié)束程序運(yùn)行從而讓連接斷開(kāi),這樣客戶端才能及時(shí)收到數(shù)據(jù)。
[0012]3.2網(wǎng)絡(luò)故障或異常
[0013]由于網(wǎng)絡(luò)故障等因素造成的請(qǐng)求超時(shí)或出錯(cuò)也可能導(dǎo)致輪詢(xún)的意外中斷,此時(shí)客戶端將收到錯(cuò)誤信息或斷開(kāi)信息。
[0014]4.輪詢(xún)的重建:當(dāng)客戶端收到斷開(kāi)指令或錯(cuò)誤信息,應(yīng)馬上重新發(fā)起請(qǐng)求,開(kāi)始一個(gè)新的輪詢(xún)周期。
[0015]但是,http長(zhǎng)輪詢(xún)存在以下缺點(diǎn)問(wèn)題
[0016]1、由于http協(xié)議是無(wú)狀態(tài)協(xié)議,每次會(huì)話都要攜帶用戶信息,導(dǎo)致用戶信息反復(fù)攜帶到服務(wù)器,浪費(fèi)寬帶。
[0017]2、請(qǐng)求中有大半是無(wú)用,因?yàn)榉?wù)器和客戶端的消息并不是每個(gè)時(shí)刻都有,客戶端反復(fù)進(jìn)行與服務(wù)器連接建立與斷開(kāi),增加服務(wù)器負(fù)載和浪費(fèi)服務(wù)器資源。
[0018]3、消息到達(dá)不夠及時(shí),因?yàn)榭蛻舳嗣看谓邮找淮蜗⒍家獢嚅_(kāi)連接,導(dǎo)致客戶端消息較多時(shí),不能通過(guò)一個(gè)連接連續(xù)接收消息,導(dǎo)致消息延時(shí)。
【發(fā)明內(nèi)容】
[0019]本發(fā)明的目的是為了解決上述問(wèn)題,提供一種分布式推送服務(wù)器系統(tǒng)及應(yīng)用該系統(tǒng)的數(shù)據(jù)推送方法,實(shí)現(xiàn)服務(wù)器承載力的提升和數(shù)據(jù)傳送的效率提高。
[0020]本發(fā)明采取的技術(shù)方案是:
[0021]一種分布式推送服務(wù)器系統(tǒng),其特征是,包括多個(gè)數(shù)據(jù)服務(wù)器、一個(gè)中間服務(wù)器、推送服務(wù)器和終端,所述多個(gè)數(shù)據(jù)服務(wù)器分別與所述中間服務(wù)器和推送服務(wù)器聯(lián)接,所述終端與所述中間服務(wù)器和推送服務(wù)器通訊聯(lián)接,所述中間服務(wù)器包括選舉模塊,所述終端向所述中間服務(wù)器發(fā)送連接請(qǐng)求,所述中間服務(wù)器通過(guò)所述選舉模塊從所述多個(gè)數(shù)據(jù)服務(wù)器中選出負(fù)載最小的服務(wù)器作為目標(biāo)服務(wù)器,并將所述目標(biāo)服務(wù)器信息發(fā)送至終端,所述終端連接至所述目標(biāo)服務(wù)器,所述推送服務(wù)器將目標(biāo)服務(wù)器的數(shù)據(jù)對(duì)所述終端進(jìn)行實(shí)時(shí)推送。
[0022]進(jìn)一步,所述中間服務(wù)器還包括列表更新模塊,所述中間服務(wù)器通過(guò)所述選舉模塊定時(shí)得到目標(biāo)服務(wù)器,所述列表更新模塊對(duì)所述中間服務(wù)器的列表中的目標(biāo)服務(wù)器進(jìn)行更新,所述中間服務(wù)器得到所述終端的連接請(qǐng)求后,直接從所述列表中得到目標(biāo)服務(wù)器信息。
[0023]進(jìn)一步,所述終端包括信息處理模塊,所述信息處理模塊將所述終端發(fā)送至所述目標(biāo)服務(wù)器的信息進(jìn)行簡(jiǎn)化,所述簡(jiǎn)化過(guò)程包括去除通信信息中的注釋代碼。
[0024]進(jìn)一步,所述推送服務(wù)器啟動(dòng)時(shí)將可用的數(shù)據(jù)服務(wù)器列表在所述中間服務(wù)器中注
ΠΠ.Ws O
[0025]進(jìn)一步,所述終端接收到所述推送服務(wù)器推送的信息后,所述終端給所述推送服務(wù)器發(fā)送回執(zhí),所述推送服務(wù)器使所述目標(biāo)服務(wù)器與所述終端解除信息發(fā)送連接關(guān)系。
[0026]一種應(yīng)用上述的分布式推送服務(wù)器系統(tǒng)的數(shù)據(jù)推送方法,其特征是,包括如下步驟:
[0027](I)所述終端向中間服務(wù)器發(fā)送連接請(qǐng)求;
[0028](2)所述中間服務(wù)器通過(guò)所述選舉模塊選出所述目標(biāo)服務(wù)器;
[0029](3)所述中間服務(wù)器將目標(biāo)服務(wù)器信息發(fā)送至終端;
[0030](4)所述終端連接與所述目標(biāo)服務(wù)器建立連接;
[0031](5)所述目標(biāo)服務(wù)器的目標(biāo)數(shù)據(jù)由所述推送服務(wù)器發(fā)送至所述終端。
[0032]進(jìn)一步,所述列表更新模塊對(duì)所述中間服務(wù)器的列表中的目標(biāo)服務(wù)器進(jìn)行更新,所述中間服務(wù)器得到所述終端的連接請(qǐng)求后,直接從所述列表中得到目標(biāo)服務(wù)器信息。
[0033]進(jìn)一步,所述第⑴步,中,所述終端通過(guò)所述信息處理模塊,將發(fā)送至所述目標(biāo)服務(wù)器的信息進(jìn)行簡(jiǎn)化。
[0034]進(jìn)一步,所述推送服務(wù)器啟動(dòng)時(shí)將可用的數(shù)據(jù)服務(wù)器列表在所述中間服務(wù)器中注
ΠΠ.Ws O
[0035]進(jìn)一步,所述第(5)步后包括如下步驟:所述終端接收到所述推送服務(wù)器推送的信息后,所述終端給所述推送服務(wù)器發(fā)送回執(zhí),所述推送服務(wù)器使所述目標(biāo)服務(wù)器與所述終端解除信息發(fā)送連接關(guān)系。
[0036]本發(fā)明的有益效果是:
[0037](I)解決了單機(jī)承載量有限的問(wèn)題。通過(guò)客戶端和服務(wù)端交互的方式,可以讓服務(wù)端通過(guò)從η臺(tái)服務(wù)器中選擇一臺(tái)比較負(fù)載較小的服務(wù)器用于客戶端對(duì)端的連接,通過(guò)這種方式實(shí)現(xiàn)服務(wù)器集群,從而可以達(dá)到承載更多的客戶端連接請(qǐng)求。
[0038](2)解決了數(shù)據(jù)傳輸載體較大問(wèn)題,openfire采用xmpp協(xié)議為數(shù)據(jù)載體,導(dǎo)致發(fā)送的每一個(gè)包都會(huì)有很多與傳輸消息不相關(guān)的其它描述,往往描述本身的大小都是傳輸消息的幾倍大,導(dǎo)致數(shù)據(jù)冗余較大。本發(fā)明可減少客戶端流量和數(shù)據(jù)傳輸較大。
[0039](3)解決了消息到達(dá)率不高的問(wèn)題,消息傳輸不可必免的消息丟失,導(dǎo)致客戶端無(wú)法接收到消息,通過(guò)消息id回執(zhí)和消息多次發(fā)送來(lái)保證消息的到達(dá)率為100%,保證了客戶端接收到消息的完整性和消息的不丟失。
【附圖說(shuō)明】
[0040]附圖1是本發(fā)明的服務(wù)器系統(tǒng)結(jié)構(gòu)示意圖;
[0041]附圖2是中間服務(wù)器列表更新結(jié)構(gòu)示意圖;
[0042]附圖3是消息發(fā)送策略示意圖;
[0043]附圖4是消息發(fā)送的簡(jiǎn)化示意圖。
【具體實(shí)施方式】
[0044]下面結(jié)合附圖對(duì)本發(fā)明分布式推送服務(wù)器系統(tǒng)及應(yīng)用該系統(tǒng)的數(shù)據(jù)推送方法的【具體實(shí)施方式】作詳細(xì)說(shuō)明。
[0045]分布式推送服務(wù)器系統(tǒng)利用合理高效的邏輯分層方式和數(shù)據(jù)流調(diào)用方式通過(guò)整體分層架構(gòu)設(shè)計(jì)和面向?qū)ο蟮臄?shù)據(jù)流調(diào)用組合策略實(shí)現(xiàn)。將客戶端與服務(wù)端的連接建立來(lái)達(dá)到可以合理分配客戶端到不同服務(wù)器,達(dá)到服務(wù)器的資源合理利用,減少服務(wù)器之間的信息交換。
[0046]參見(jiàn)附圖1,分布式推送服務(wù)器系統(tǒng)包括多個(gè)數(shù)據(jù)服務(wù)器1、一個(gè)中間服務(wù)器3、推送服務(wù)器2和終端4,多個(gè)數(shù)據(jù)服務(wù)器I包括Key-Value數(shù)據(jù)庫(kù)服務(wù)器,企業(yè)消息系統(tǒng)服務(wù)器和應(yīng)用程序協(xié)調(diào)服務(wù)器