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