本發明實施例涉及互聯網
技術領域:
,特別涉及一種消息推送方法及裝置。
背景技術:
:現有技術中,在一些場景中,推送服務器需要在短時間內向客戶端推送大量的推送消息。此時,推送服務器很可能因為接收到大量的推送消息而導致推送服務器發生堵塞,甚至導致推送服務器宕機。技術實現要素:為了解決現有技術中存在的問題,本發明實施例提供了一種消息推送方法及裝置。技術方案如下:根據本發明實施例的第一方面,提供一種消息推送方法,該方法包括:在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息;所述緩存服務器中存儲有業務服務器生成并發送的推送消息;緩存獲取到的所述推送消息至所述緩存隊列;推送所述緩存隊列中的推送消息至客戶端。可選地,所述在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息,包括:在所述緩存隊列中的推送消息減少一條時,從所述緩存服務器中獲取一條推送消息;或者,在所述緩存隊列中的推送消息的條數小于預設閾值時,從所述緩存服務器中獲取預設條數的推送消息,所述預設條數與所述預設閾值的總和不超過所述最大容量。可選地,所述推送所述緩存隊列中的推送消息至客戶端,包括:通過n個進程推送所述緩存隊列中的推送消息至所述客戶端,n為大于等于2的整數。可選地,所述方法還包括:獲取所述緩存服務器中緩存的推送消息的總量;根據所述總量分配所述n個進程。可選地,所述方法還包括:根據所述總量設置所述緩存隊列的最大容量。第二方面,提供了一種消息推送裝置,所述裝置包括:消息獲取模塊,用于在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息;所述緩存服務器中存儲有業務服務器生成并發送的推送消息;緩存模塊,用于緩存獲取到的所述推送消息至所述緩存隊列;推送模塊,用于推送所述緩存隊列中的推送消息至客戶端。可選地,所述消息獲取模塊,還用于:在所述緩存隊列中的推送消息減少一條時,從所述緩存服務器中獲取一條推送消息;或者,在所述緩存隊列中的推送消息的條數小于預設閾值時,從所述緩存服務器中獲取預設條數的推送消息,所述預設條數與所述預設閾值的總和不超過所述最大容量。可選地,所述推送模塊,還用于通過n個進程推送所述緩存隊列中的推送消息至所述客戶端,n為大于等于2的整數。可選地,所述裝置還包括:總量獲取模塊,用于獲取所述緩存服務器中緩存的推送消息的總量;分配模塊,用于根據所述總量獲取模塊獲取到的所述總量分配所述n個進程。可選地,所述裝置還包括:設置模塊,用于根據所述總量獲取模塊獲取到的所述總量設置所述緩存隊列的最大容量。本發明實施例提供的技術方案帶來的有益效果是:通過在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息,緩存服務器中緩存有業務服務器生成并發送的推送消息;緩存獲取到的推送消息至緩存隊列,并推送緩存隊列中的推送消息至客戶端;解決了現有技術中當推送消息的數量較大時,推送服務器可能會堵塞甚至宕機的問題;達到了即使待推送的推送消息數量較大,那么由于推送消息先在緩存服務器中緩存,而推送服務器只有在緩存隊列滿足預設條件時,才會從緩存服務器中獲取推送消息,也即達到了可以避免推送服務器被大量推送消息沖垮進而宕機的效果。附圖說明為了更清楚地說明本發明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖1是本發明各個實施例提供的消息推送方法所涉及的實施環境的示意圖;圖2是本發明一個實施例提供的消息推送方法的流程圖;圖3是本發明另一實施例提供的消息推送方法的流程圖;圖4是本發明另一實施例提供的消息推送方法的原理框圖;圖5是本發明一個實施例提供的消息推送裝置的示意圖;圖6是本發明一個實施例提供的消息推送裝置的示意圖;圖7是本發明一個實施例提供的服務器的示意圖。具體實施方式為使本發明的目的、技術方案和優點更加清楚,下面將結合附圖對本發明實施方式作進一步地詳細描述。請參考圖1,其示出了本發明各個實施例所涉及的實施環境的示意圖,如圖1所示,該實施環境可以包括業務服務器110、緩存服務器120、推送服務器130和客戶端140。業務服務器110是指為客戶端140提供業務服務的服務器,該業務服務器110可以為一臺服務器,也可以為由多臺服務器組成的服務器集群。實際實現時,業務服務器110可以通過有線或者無線網絡與緩存服務器120相連。緩存服務器120是指用于緩存消息的服務器,并且,在下述各個實施例中,緩存服務器120的存儲空間的大小是根據應用場景預先分配的,該存儲空間足以緩存該應用場景下的推送消息。實際實現時,該緩存服務器120可以為一臺服務器,也可以為由多臺服務器組成的服務器集群,并且緩存服務器120可以通過有線或者無線網絡與推送服務器130相連。具體的,緩存服務器120可以為Redis(數據庫)服務器。推送服務器130中設置有緩存隊列,該緩存隊列設置有最大容量,也即該緩存隊列中可以設置有最大容量的推送消息。實際實現時,推送服務器130可以主動從緩存服務器120中獲取推送消息,并緩存獲取到的推送消息至緩存隊列,對此并不做限定。推送服務器130可以通過有線或者無線網絡與客戶端140所處的終端相連。客戶端140可以運行在終端上。該客戶端140可以為天氣預報客戶端、炒股客戶端或者其它類型的客戶端,對此并不做限定。圖1僅以客戶端140有一個為例,實際實現時,客戶端140還可以多個,對此并不做限定。圖1只是以實施環境中包括上述幾種設備來舉例,實際實現時,實施環境中還可以包括更多或者更少的設備,對此并不做限定。請參考圖2,其示出了本發明一個實施例提供的消息推送方法的方法流程圖,本實施例以該消息推送方法用于圖1所示的推送服務器中來舉例說明。如圖2所示,該消息推送方法可以包括:步驟201,在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息;緩存服務器中存儲有業務服務器生成并發送的推送消息。步驟202,緩存獲取到的推送消息至緩存隊列。步驟203,推送緩存隊列中的推送消息至客戶端。綜上所述,本實施例提供的消息推送方法,通過在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息,緩存服務器中緩存有業務服務器生成并發送的推送消息;緩存獲取到的推送消息至緩存隊列,并推送緩存隊列中的推送消息至客戶端;解決了現有技術中當推送消息的數量較大時,推送服務器可能會堵塞甚至宕機的問題;達到了即使待推送的推送消息數量較大,那么由于推送消息先在緩存服務器中緩存,而推送服務器只有在緩存隊列滿足預設條件時,才會從緩存服務器中獲取推送消息,也即達到了可以避免推送服務器被大量推送消息沖垮進而宕機的效果。請參考圖3,其示出了本發明一個實施例提供的消息推送方法的方法流程圖,本實施例以該消息推送方法用于圖1所示的推送服務器中來舉例說明。如圖3所示,該消息推送方法可以包括:步驟301,在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息;緩存服務器中存儲有業務服務器生成并發送的推送消息。業務服務器生成需要推送至客戶端的推送消息之后,業務服務器可以發送生成的大量的推送消息至緩存服務器。相應的緩存服務器接收并緩存業務服務器發送的大量的推送消息。推送服務器可以在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息。可選地,推送服務器可以監控緩存服務器中是否緩存有推送消息,在監控結果為緩存服務器中緩存有推送消息時,則在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息;而在監控結果為緩存服務器中未緩存有推送消息時,則流程結束;可選地,在緩存服務器接收并緩存業務服務器發送的推送消息之后,緩存服務器還可以主動發送觸發請求至推送服務器,推送服務器接收到觸發請求之后,在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息。其中,推送服務器從緩存服務器中獲取推送消息的步驟可以包括如下兩種實現方式:第一種,在緩存隊列中的推送消息減少一條時,從緩存服務器中獲取一條推送消息。推送服務器每從緩存隊列中取出一條推送消息之后,推送服務器可以從緩存服務器中獲取一條推送消息。具體的,推送服務器可以發送消息獲取請求至緩存服務器,緩存服務器接收到消息獲取請求之后返回推送消息至推送服務器,相應的,推送服務器接收緩存服務器返回的推送消息。其中,消息獲取請求用于請求獲取一條推送消息。第二種,在緩存隊列中的推送消息的條數小于預設閾值時,從緩存服務器中獲取預設條數的推送消息,預設條數與預設閾值的總和不超過最大容量。作為另一種實現方式,推送服務器還可以在緩存隊列中的推送消息的條數小于預設閾值時,從緩存服務器中獲取預設條數的推送消息。該預設閾值可以為推送服務器中系統默認的數值,也可以是用戶自定義的數值,對此并不做限定。并且,實際實現時,若推送服務器通過多進程推送消息,則該預設閾值可以為多進程的進程數。預設條數與預設閾值的總和不超過最大容量,最大容量是預先設定的緩存隊列的容量。實際實現時,預設條數可以為最大容量與緩存隊列中當前已有的推送消息的條數的差值。比如,緩存隊列的最大容量為50條,當前已有的推送消息的條數為5條,則預設條數即為45條,推送服務器可以從緩存服務器中獲取45條推送消息。又比如,在初始狀態,緩存隊列中沒有推送消息,則此時,推送服務器即可從緩存隊列中獲取50條推送消息。當然,實際實現時,推送服務器還可以在其他條件時從緩存服務器中獲取推送消息,本實施例對此并不做限定。步驟302,緩存獲取到的推送消息至緩存隊列。在推送服務器從緩存服務器中獲取到推送消息之后,推送服務器可以將獲取到的推送消息緩存至緩存隊列。步驟303,通過n個進程推送緩存隊列中的推送消息至客戶端,n為大于等于2的整數。推送服務器中可以啟動n個進程,并通過n個進程推送緩存隊列中的推送消息至客戶端。可選地,在每個進程推送一條推送消息至客戶端之后,若緩存隊列中存在待發送的推送消息,則該進程可以從緩存隊列中取出一條推送消息,并繼續推送取出的推送消息至客戶端,對此并不做限定。以緩存隊列的最大容量為N,進程的個數為n為例,請參考圖4,其示出了本實施例的原理圖。如圖4所示,推送服務器主動從緩存服務器中獲取推送消息,將獲取到的推送消息緩存至緩存隊列,n個進程推送緩存隊列中的推送消息至客戶端。綜上所述,本實施例提供的消息推送方法,通過在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息,緩存服務器中緩存有業務服務器生成并發送的推送消息;緩存獲取到的推送消息至緩存隊列,并推送緩存隊列中的推送消息至客戶端;解決了現有技術中當推送消息的數量較大時,推送服務器可能會堵塞甚至宕機的問題;達到了即使待推送的推送消息數量較大,那么由于推送消息先在緩存服務器中緩存,而推送服務器只有在緩存隊列滿足預設條件時,才會從緩存服務器中獲取推送消息,也即達到了可以避免推送服務器被大量推送消息沖垮進而宕機的效果。在上述實施例中,推送服務器還可以執行如下步驟:第一,獲取緩存服務器中緩存的推送消息的總量。推送服務器可以發送總量獲取請求至緩存服務器,接收該緩存服務器返回的緩存服務器中緩存的推送消息的總量。其中,總量獲取請求用于請獲取緩存服務器中緩存的推送消息的總量。第二,根據總量分配n個進程。推送服務器可以根據預設對應關系以及獲取到的總量分配n個進程。其中,預設對應關系為n的取值與獲取到的總量之間的正相關關系。比如,請結合下表,其示出了一種可能的預設對應關系,則當獲取到的總量為4500條時,推送服務器可以分配15個進程。推送消息的總量進程的個數0-200052000-4000104000-6000156000-800020通過根據緩存服務器中的推送消息的總量來分配進程,使得,在待推送的推送消息的總量較多時,可以分配更多的進程來推送消息,提高了推送消息的效率的效果。此外,在根據緩存服務器中的推送消息的總量分配進程數的同時,推送服務器還可以根據獲取到的總量設置緩存隊列的最大容量。可選地,為了保證n個進程的正常運行,緩存隊列的最大容量可以設置為進程數的m倍。其中,m為大于等于2的整數,對此并不做限定。請參考圖5,其示出了本發明一個實施例提供的消息推送裝置的結構示意圖,如圖5所示,該消息推送裝置可以包括:消息獲取模塊510、緩存模塊520和推送模塊530。消息獲取模塊510,用于在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息;所述緩存服務器中存儲有業務服務器生成并發送的推送消息;緩存模塊520,用于緩存獲取到的所述推送消息至所述緩存隊列;推送模塊530,用于推送所述緩存隊列中的推送消息至客戶端。綜上所述,本實施例提供的消息推送裝置,通過在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息,緩存服務器中緩存有業務服務器生成并發送的推送消息;緩存獲取到的推送消息至緩存隊列,并推送緩存隊列中的推送消息至客戶端;解決了現有技術中當推送消息的數量較大時,推送服務器可能會堵塞甚至宕機的問題;達到了即使待推送的推送消息數量較大,那么由于推送消息先在緩存服務器中緩存,而推送服務器只有在緩存隊列滿足預設條件時,才會從緩存服務器中獲取推送消息,也即達到了可以避免推送服務器被大量推送消息沖垮進而宕機的效果。請參考圖6,其示出了本發明一個實施例提供的消息推送裝置的結構示意圖,如圖6所示,該消息推送裝置可以包括:消息獲取模塊610、緩存模塊620和推送模塊630。消息獲取模塊610,用于在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息;所述緩存服務器中存儲有業務服務器生成并發送的推送消息;緩存模塊620,用于緩存獲取到的所述推送消息至所述緩存隊列;推送模塊630,用于推送所述緩存隊列中的推送消息至客戶端。可選地,所述消息獲取模塊610,還用于:在所述緩存隊列中的推送消息減少一條時,從所述緩存服務器中獲取一條推送消息;或者,在所述緩存隊列中的推送消息的條數小于預設閾值時,從所述緩存服務器中獲取預設條數的推送消息,所述預設條數與所述預設閾值的總和不超過所述最大容量。可選地,所述推送模塊630,還用于通過n個進程推送所述緩存隊列中的推送消息至所述客戶端,n為大于等于2的整數。可選地,所述裝置還包括:總量獲取模塊640,用于獲取所述緩存服務器中緩存的推送消息的總量;分配模塊650,用于根據所述總量獲取模塊640獲取到的所述總量分配所述n個進程。可選地,所述裝置還包括:設置模塊660,用于根據所述總量獲取模塊640獲取到的所述總量設置所述緩存隊列的最大容量。綜上所述,本實施例提供的消息推送裝置,通過在緩存隊列滿足預設條件時,從緩存服務器中獲取推送消息,緩存服務器中緩存有業務服務器生成并發送的推送消息;緩存獲取到的推送消息至緩存隊列,并推送緩存隊列中的推送消息至客戶端;解決了現有技術中當推送消息的數量較大時,推送服務器可能會堵塞甚至宕機的問題;達到了即使待推送的推送消息數量較大,那么由于推送消息先在緩存服務器中緩存,而推送服務器只有在緩存隊列滿足預設條件時,才會從緩存服務器中獲取推送消息,也即達到了可以避免推送服務器被大量推送消息沖垮進而宕機的效果。通過根據緩存服務器中的推送消息的總量來分配進程,使得,在待推送的推送消息的總量較多時,可以分配更多的進程來推送消息,提高了推送消息的效率的效果。需要說明的是:上述實施例提供的消息推送裝置,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據需要而將上述功能分配由不同的功能模塊完成,即將服務器的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的消息推送裝置和消息推送方法實施例屬于同一構思,其具體實現過程詳見方法實施例,這里不再贅述。本發明實施例還提供了一種計算機可讀存儲介質,該計算機可讀存儲介質可以是上述實施例中的存儲器中所包含的計算機可讀存儲介質;也可以是單獨存在,未裝配入終端中的計算機可讀存儲介質。該計算機可讀存儲介質存儲有一個或者一個以上程序,該一個或者一個以上程序被一個或者一個以上的處理器用來執行上述消息推送方法。請參考圖7,其示出了本發明一個實施例提供的服務器的結構示意圖。該服務器用于實施上述實施例中提供的消息推送方法。具體來講:所述服務器700包括中央處理單元(CPU)701、包括隨機存取存儲器(RAM)702和只讀存儲器(ROM)703的系統存儲器704,以及連接系統存儲器704和中央處理單元701的系統總線705。所述服務器700還包括幫助計算機內的各個器件之間傳輸信息的基本輸入/輸出系統(I/O系統)706,和用于存儲操作系統713、應用程序714和其他程序模塊715的大容量存儲設備707。所述基本輸入/輸出系統706包括有用于顯示信息的顯示器708和用于用戶輸入信息的諸如鼠標、鍵盤之類的輸入設備709。其中所述顯示器708和輸入設備709都通過連接到系統總線705的輸入輸出控制器710連接到中央處理單元701。所述基本輸入/輸出系統706還可以包括輸入輸出控制器710以用于接收和處理來自鍵盤、鼠標、或電子觸控筆等多個其他設備的輸入。類似地,輸入輸出控制器710還提供輸出到顯示屏、打印機或其他類型的輸出設備。所述大容量存儲設備707通過連接到系統總線705的大容量存儲控制器(未示出)連接到中央處理單元701。所述大容量存儲設備707及其相關聯的計算機可讀介質為服務器700提供非易失性存儲。也就是說,所述大容量存儲設備707可以包括諸如硬盤或者CD-ROM驅動器之類的計算機可讀介質(未示出)。不失一般性,所述計算機可讀介質可以包括計算機存儲介質和通信介質。計算機存儲介質包括以用于存儲諸如計算機可讀指令、數據結構、程序模塊或其他數據等信息的任何方法或技術實現的易失性和非易失性、可移動和不可移動介質。計算機存儲介質包括RAM、ROM、EPROM、EEPROM、閃存或其他固態存儲其技術,CD-ROM、DVD或其他光學存儲、磁帶盒、磁帶、磁盤存儲或其他磁性存儲設備。當然,本領域技術人員可知所述計算機存儲介質不局限于上述幾種。上述的系統存儲器704和大容量存儲設備707可以統稱為存儲器。根據本發明的各種實施例,所述服務器700還可以通過諸如因特網等網絡連接到網絡上的遠程計算機運行。也即服務器700可以通過連接在所述系統總線705上的網絡接口單元711連接到網絡712,或者說,也可以使用網絡接口單元711來連接到其他類型的網絡或遠程計算機系統(未示出)。所述存儲器還包括一個或者一個以上的程序,所述一個或者一個以上程序存儲于存儲器中,且經配置以由一個或者一個以上處理器執行。上述一個或者一個以上程序包含用于執行上述消息推送方法的指令。應當理解的是,在本文中使用的,除非上下文清楚地支持例外情況,單數形式“一個”(“a”、“an”、“the”)旨在也包括復數形式。還應當理解的是,在本文中使用的“和/或”是指包括一個或者一個以上相關聯地列出的項目的任意和所有可能組合。上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。本領域普通技術人員可以理解實現上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。以上所述僅為本發明的較佳實施例,并不用以限制本發明,凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。當前第1頁1 2 3