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