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