專利名稱:一種消息推送服務的實現(xiàn)方法與系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及互聯(lián)網(wǎng)領域,特別涉及一種消息推送服務的實現(xiàn)方法與系統(tǒng)。
背景技術:
隨著互聯(lián)網(wǎng)的不斷發(fā)展,客戶端與服務端消息傳輸越來越普遍,為了更好的提高用戶體驗,提高消息的實時性,通常會在客戶端展現(xiàn)時,針對變化的信息和數(shù)據(jù)進行部分更新變換,避免整體頁面的刷新或全部數(shù)據(jù)的重新請求,消息推送服務系統(tǒng)的設計和實現(xiàn)就變得越來越重要。目前互聯(lián)網(wǎng)領域主流的消息服務模式為客戶端按照一定的時間間隔,對服務端進行輪詢請求,將數(shù)據(jù)拉取到客戶端并進行異步展現(xiàn),此種方式實現(xiàn)簡單,但也存在如下一些缺點和不足1)客戶端的輪詢服務會造成對服務端的持續(xù)壓力,是服務端服務能力受限,響應能力下降,針對請求的峰值困難;幻客戶端的輪詢請求會造成客戶端性能的下降, 如手機客戶端不斷輪詢服務端,會造成耗電和網(wǎng)絡流量的增加,同時對性能較弱的終端也會造成整體性能的影響;3)消息的實時性會有一定影響,因輪詢需要月約定輪詢的間隔時間,在間隔時間其間,客戶端不能收到和處理任何新到的消息,對用戶體驗會造成影響;4) 非實時的異步輪詢請求也會造成網(wǎng)絡傳輸?shù)睦_,在兩次輪詢間隔其間可能會沒有任何消息,造成請求的浪費;同時,也可能在間隔時間期有大量累積的消息,在下次客戶端請求的時候一次獲取,給網(wǎng)絡傳輸造成壓力。
發(fā)明內容
本發(fā)明提供的,以解決以一定的時間間隔對服務端進行輪詢請求導致的問題。本發(fā)明提供了一種消息推送服務的實現(xiàn)方法,包括步驟1,推送消息隊列接收模塊將需要推送的消息存儲到消息隊列中;步驟2,推送邏輯處理模塊輪詢所述隊列并將消息存儲到狀態(tài)存儲模塊中用戶所對應的Key-Value鍵值對中;步驟3,用戶登錄客戶端后,客戶端向長連接通訊模塊發(fā)起推送服務請求;步驟4,長連接通訊模塊建立并維持與客戶端的長連接,并向狀態(tài)存儲模塊寫入用戶的狀態(tài);步驟5,長連接通訊模塊詢問狀態(tài)存儲模塊是否有消息推送給用戶,如果是,長連接通訊模塊則從狀態(tài)存儲模塊中取出需要推送的消息發(fā)送至客戶端,并維持與客戶端和狀態(tài)存儲模塊的連接狀態(tài);否則,長連接通訊模塊維持與客戶端的長連接。在一個示例中,步驟1中,推送消息隊列接收模塊將需要推送的消息隨機存儲到消息隊列中。在一個示例中,步驟2中,推送邏輯處理模塊按照消息存儲到消息隊列中的順序讀取消息;推送邏輯處理模塊根據(jù)消息隊列的狀態(tài)調整線程資源。在一個示例中,步驟2中,狀態(tài)存儲模塊以用戶的標識符為鍵值,鍵值由長連接通訊模塊寫入;鍵值對應的值為需要推送的消息,該消息由推送邏輯處理模塊寫入。在一個示例中,步驟3中,長連接通訊模塊采用基于HTTP協(xié)議。本發(fā)明提供了一種消息推送服務的實現(xiàn)系統(tǒng),包括推送消息隊列接收模塊,用于將需要推送的消息存儲到消息隊列中;推送邏輯處理模塊,用于輪詢所述消息隊列并將消息存儲到狀態(tài)存儲模塊中用戶所對應的Key-Value鍵值對中;長連接通訊模塊,用于在用戶登錄客戶端后,接收客戶端向長連接通訊模塊發(fā)起推送服務請求;建立并維持與客戶端的長連接,并向狀態(tài)存儲模塊寫入用戶的狀態(tài);詢問狀態(tài)存儲模塊是否有消息推送給用戶;有消息需要推送給用戶時,從狀態(tài)存儲模塊中取出需要推送的消息發(fā)送至客戶端,并維持與客戶端和狀態(tài)存儲模塊的連接狀態(tài);沒有消息需要推送給用戶時,維持與客戶端的長連接。在一個示例中,推送消息隊列接收模塊,用于將需要推送的數(shù)據(jù)隨機存儲到消息隊列中。在一個示例中,推送邏輯處理模塊,用于按照消息存儲到消息隊列中的順序讀取消息;推送邏輯處理模塊,用于根據(jù)消息隊列的狀態(tài)調整線程資源。在一個示例中,狀態(tài)存儲模塊包括鍵值對,鍵值對以用戶的標識符為鍵值,鍵值由長連接通訊模塊寫入;鍵值對應的值為需要推送的消息,該消息由推送邏輯處理模塊寫入。在一個示例中,長連接通訊模塊采用基于HTTP協(xié)議。本發(fā)明實施例的有益效果是將客戶端輪詢請求轉變?yōu)榭蛻舳伺c服務端進行網(wǎng)絡通訊的長連接,可進行多個實例的部署,各實例可分擔客戶端請求訪問壓力,提高了系統(tǒng)的可用性。
圖1為本發(fā)明的消息推送服務系統(tǒng)示意圖;圖2為本發(fā)明的消息推送服務方法流程圖。
具體實施例方式為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明實施方式作進一步地詳細描述。參見圖1,為本發(fā)明實施例提供的消息推送服務系統(tǒng)示意圖,該系統(tǒng)分為如下幾個模塊推送消息隊列接收模塊該模塊主要是由消息隊列組成,用來接收來自各個外部系統(tǒng)需要推送的消息。利用消息隊列來進行寫入壓力峰值的緩沖,并可以進行異步讀寫操作,提高系統(tǒng)的靈活性。在可用性方面,該模塊針對多個隊列實例采用隨機寫,順序讀的方式,既保證了該模塊的高可用性,也避免了復雜架構的維護成本。推送邏輯處理模塊該模塊主要采用線程池技術,用來讀取消息隊列中的推送消息信息,將該信息以用戶ID的鍵值形式,按照自定義的可擴展的結構化數(shù)據(jù)存儲結構,異步存儲到狀態(tài)存儲模塊。該模塊可以根據(jù)消息隊列的狀態(tài)自動進行線程資源的增減,既可避免消息并發(fā)的峰值處理繁忙,又可減少消息量很小時對主機線程資源的浪費等。同時該模塊不存在狀態(tài),可以進行多實例分布式部署,進行負載均衡等提高系統(tǒng)可用性。狀態(tài)存儲模塊該模塊為自行實現(xiàn)的高速鍵值對緩存存儲引擎,功能為以用戶ID 為鍵值,存儲相應需要推送的消息的結構化數(shù)據(jù),該模塊的鍵值ID寫入為長連接通訊模塊來維護,鍵值所對應的值的寫入為推送邏輯處理模塊進行寫入維護。存儲引擎所維護的用戶信息也均為在線用戶,業(yè)務上對于非在線用戶進行消息推送是沒有意義的。離線消息的持久化信息會在另外的存儲模塊中進行維護。該模塊可以根據(jù)鍵值存儲引擎的特點進行一致性哈希等策略,進行多實例的部署,既可減少單實例系統(tǒng)瓶頸,又可提高系統(tǒng)的可用性。長連接通訊模塊該模塊基于HTTP協(xié)議,內部基于隊列和消息觸發(fā)機制實現(xiàn)的 HTTP長連接服務,在用戶上線時,接收到客戶端發(fā)送的用戶推送服務接口請求的時候,該模塊維持與客戶端的HTTP長連接,同時將該請求用戶的ID及其他信息寫入狀態(tài)存儲模塊,隨后將一直保持與狀態(tài)存儲模塊的準實時通訊。當發(fā)現(xiàn)有新消息需要進行推送的時候,則從狀態(tài)存儲模塊中取出欲推送的消息,同時推送給客戶端,若沒有需要推送的信息,則一直維持長連接而不進行數(shù)據(jù)通信。同時該模塊采用HTTP協(xié)議,便于客戶端實現(xiàn)和前端基于HTTP 代理的協(xié)議分發(fā)等策略,可進行多個實例的部署,各實例可分擔客戶端請求訪問壓力,可高了系統(tǒng)的可用性。具體請求響應的工作流程如圖2所示步驟10,推送消息隊列接收模塊實時接收需要推送的數(shù)據(jù)并混存到隊列中。步驟11,推送邏輯處理模塊輪詢隊列,將數(shù)據(jù)組裝成推送的結構化數(shù)據(jù),異步存儲到狀態(tài)存儲模塊中該用戶ID所對應的鍵值對中。步驟12,客戶端登錄上線,向推送服務發(fā)起接口請求;步驟13,長連接通訊模塊收到客戶端請求,建立并維持與客戶端的長連接,同時向狀態(tài)存儲模塊寫入用戶的狀態(tài)等信息。步驟14,長連接通訊模塊一直維持并詢問狀態(tài)存儲模塊是否有最新消息推送給該用戶,若沒有最新消息,執(zhí)行步驟15,若有新消息,執(zhí)行步驟16。步驟15,長連接通訊模塊則會維持與客戶端的長連接,不進行數(shù)據(jù)交互,同時也會與狀態(tài)存儲模塊保持詢問狀態(tài)。步驟16,從狀態(tài)存儲模塊中取出需要推送的結構化消息數(shù)據(jù),返回給客戶端,然后繼續(xù)維持與客戶端和狀態(tài)存儲模塊的鏈接狀態(tài)。以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換、改進等,例如模塊名稱的改變或替換,均包含在本發(fā)明的保護范圍內。
權利要求
1.一種消息推送服務的實現(xiàn)方法,其特征在于,包括步驟1,推送消息隊列接收模塊將需要推送的消息存儲到消息隊列中;步驟2,推送邏輯處理模塊輪詢所述消息隊列并將消息存儲到狀態(tài)存儲模塊中用戶所對應的Key-Value鍵值對中;步驟3,用戶登錄客戶端后,客戶端向長連接通訊模塊發(fā)起推送服務請求;步驟4,長連接通訊模塊建立并維持與客戶端的長連接,并向狀態(tài)存儲模塊寫入用戶的狀態(tài);步驟5,長連接通訊模塊詢問狀態(tài)存儲模塊是否有消息推送給用戶,如果是,長連接通訊模塊則從狀態(tài)存儲模塊中取出需要推送的消息發(fā)送至客戶端,并維持與客戶端和狀態(tài)存儲模塊的連接狀態(tài);否則,長連接通訊模塊維持與客戶端的長連接。
2.如權利要求1所述的消息推送服務的實現(xiàn)方法,其特征在于,步驟1中,推送消息隊列接收模塊將需要推送的消息隨機存儲到消息隊列中。
3.如權利要求1所述的消息推送服務的實現(xiàn)方法,其特征在于,步驟2中,推送邏輯處理模塊按照消息存儲到消息隊列中的順序讀取消息;推送邏輯處理模塊根據(jù)消息隊列的狀態(tài)調整線程資源。
4.如權利要求1所述的消息推送服務的實現(xiàn)方法,其特征在于,步驟2中,狀態(tài)存儲模塊以用戶的標識符為鍵值,鍵值由長連接通訊模塊寫入;鍵值對應的值為需要推送的消息, 該消息由推送邏輯處理模塊寫入。
5.如權利要求1所述的消息推送服務的實現(xiàn)方法,其特征在于,步驟3中,長連接通訊模塊采用HTTP協(xié)議。
6.一種消息推送服務的實現(xiàn)系統(tǒng),其特征在于,包括推送消息隊列接收模塊,用于將需要推送的消息存儲到消息隊列中;推送邏輯處理模塊,用于輪詢所述隊列并將消息存儲到狀態(tài)存儲模塊中用戶所對應的 Key-Value鍵值對中;長連接通訊模塊,用于在用戶登錄客戶端后,接收客戶端向長連接通訊模塊發(fā)起推送服務請求;建立并維持與客戶端的長連接,并向狀態(tài)存儲模塊寫入用戶的狀態(tài);詢問狀態(tài)存儲模塊是否有消息推送給用戶;有消息需要推送給用戶時,從狀態(tài)存儲模塊中取出需要推送的消息發(fā)送至客戶端,并維持與客戶端和狀態(tài)存儲模塊的連接狀態(tài);沒有消息需要推送給用戶時,維持與客戶端的長連接。
7.如權利要求6所述的消息推送服務的實現(xiàn)系統(tǒng),其特征在于,推送消息隊列接收模塊,用于將需要推送的數(shù)據(jù)隨機存儲到消息隊列中。
8.如權利要求6所述的消息推送服務的實現(xiàn)系統(tǒng),其特征在于,推送邏輯處理模塊,用于按照消息存儲到消息隊列中的順序讀取消息;推送邏輯處理模塊,用于根據(jù)消息隊列的狀態(tài)調整線程資源。
9.如權利要求6所述的消息推送服務的實現(xiàn)系統(tǒng),其特征在于,狀態(tài)存儲模塊包括鍵值對,鍵值對以用戶的標識符為鍵值,鍵值由長連接通訊模塊寫入;鍵值對應的值為需要推送的消息,該消息由推送邏輯處理模塊寫入。
10.如權利要求6所述的消息推送服務的實現(xiàn)系統(tǒng),其特征在于,長連接通訊模塊采用 HTTP協(xié)議。
全文摘要
本發(fā)明公開一種消息推送服務的實現(xiàn)方法與系統(tǒng)。該實現(xiàn)方法包括步驟1,推送消息隊列接收模塊將需要推送的消息存儲到隊列中;步驟2,推送邏輯處理模塊輪詢隊列并將消息存儲到狀態(tài)存儲模塊中用戶所對應的Key-Value鍵值對中;步驟3,用戶登錄后,客戶端向長連接通訊模塊發(fā)起推送服務請求;步驟4,長連接通訊模塊建立并維持與客戶端的長連接,并向狀態(tài)存儲模塊寫入用戶的狀態(tài);步驟5,長連接通訊模塊詢問狀態(tài)存儲模塊是否有消息推送給用戶,若是,從狀態(tài)存儲模塊中取出消息發(fā)送至客戶端,并維持與客戶端和狀態(tài)存儲模塊的連接狀態(tài);否則,維持與客戶端的長連接。本發(fā)明將客戶端輪詢請求轉變?yōu)榭蛻舳伺c服務端進行網(wǎng)絡通訊的長連接,提高了系統(tǒng)的可用性。
文檔編號H04L29/08GK102523177SQ201110427869
公開日2012年6月27日 申請日期2011年12月19日 優(yōu)先權日2011年12月19日
發(fā)明者康光磊 申請人:北京新媒傳信科技有限公司