本申請涉及計算機技術領域,具體涉及互聯(lián)網(wǎng)技術領域,尤其涉及用于推送即時消息的方法和裝置。
背景技術:
在移動互聯(lián)網(wǎng)時代,越來越多的移動應用程序具有了即時通訊的功能,為用戶提供信息交換的服務。其中的一些移動應用程序用于提供點對點的私聊功能以及一對多的群聊功能,這類軟件的特點是保證消息的可靠推送,不同的消息按照發(fā)送的時間有序的呈現(xiàn)給接收用戶。這種模式的消息服務提供可靠傳輸,但是受制于服務器的負載能力,消息的廣播范圍有限。另外,還存在網(wǎng)絡直播軟件,這種軟件為用戶提供通過彈幕來進行群體互動的服務,這種模式的消息服務可以對海量用戶的消息廣播,但是不能保證消息準確有序到達終端用戶。
通常,不同的應用場景對即時消息推送的服務質量要求不一樣,因此合適的信息推送模式不同,而現(xiàn)有技術一款應用程序通常僅支持一種即時消息的傳遞模式,因此僅能適用單一的場景,缺乏靈活性。
技術實現(xiàn)要素:
本申請的目的在于提出一種改進的用于推送即時消息的方法和裝置,來解決以上背景技術部分提到的技術問題。
第一方面,本申請?zhí)峁┝艘环N用于推送即時消息的方法,該方法包括:接收長連接服務器重定向的即時消息,其中該即時消息是與該長連接服務器已建立長連接的客戶端集合中的客戶端所發(fā)送的即時消息;確定該客戶端集合的客戶端數(shù)量;比較該客戶端數(shù)量與第一閾值,并根據(jù)比較結果將該即時消息設置為對應的消息類型,其中,該客戶端數(shù)量小于或等于第一閾值時對應的消息類型為反拉模式,該客戶端數(shù)量大于第一閾值時對應的消息類型為直推模式;向該長連接服務器發(fā)起用于將已設置消息類型的該即時消息推送至該客戶端集合的遠程過程調用。
在一些實施例中,該向該長連接服務器發(fā)起將已設置消息類型的該即時消息推送至該客戶端集合的遠程過程調用,包括:確定該客戶端數(shù)量是否大于第二閾值;若該客戶端數(shù)量大于第二閾值,則將該客戶端集合拆分成多個客戶端數(shù)量小于或等于第二閾值的客戶端子集;向該長連接服務器發(fā)起將已設置消息類型的該即時消息分別推送至各個客戶端子集的多個遠程過程調用。
在一些實施例中,該確定該客戶端集合的客戶端數(shù)量,包括:根據(jù)注冊信息確定該客戶端集合的客戶端數(shù)量,其中,該注冊信息是響應于該長連接服務器與客戶端建立長連接時發(fā)送的客戶端注冊請求而生成的。
第二方面,本申請?zhí)峁┝擞忠环N用于推送即時消息的方法,該方法包括:接收與該長連接服務器已建立長連接的客戶端集合中的客戶端所發(fā)送的即時消息;將該即時消息重定向至消息服務器;接收該消息服務器在對該即時消息設置消息類型后、發(fā)起的將已設置消息類型的該即時消息推送至該客戶端集合的遠程過程調用;執(zhí)行該遠程過程調用以將該即時消息推送至該客戶端集合;其中,該消息類型是該消息服務器對該客戶端集合的客戶端數(shù)量與第一閾值進行比較并根據(jù)比較結果對該即時消息設置的,該客戶端數(shù)量小于第一閾值時對應的消息類型為反拉模式,該客戶端數(shù)量大于第一閾值時對應的消息類型為直推模式。
在一些實施例中,該接收該消息服務器在對該即時消息設置消息類型后、發(fā)起的將已設置消息類型的該即時消息推送至該客戶端集合的遠程過程調用,包括:接收該消息服務器發(fā)出的多個遠程過程調用,其中,每個遠程過程調用分別用于將已設置消息類型的該即時消息推送至該客戶端集合的不同客戶端子集,該客戶端子集是該消息服務器在該客戶端集合的客戶端數(shù)量大于第二閾值時對該客戶端集合進行劃分所得到的客戶端數(shù)量小于第二閾值的客戶端子集;以及該執(zhí)行該遠程過程調用以將該即時消息推送至該客戶端集合,包括:依次執(zhí)行該多個遠程過程調用以按序將該即時消息推送到該客戶端集合的多個客戶端子集。
在一些實施例中,該方法還包括客戶端注冊步驟,該客戶端注冊步驟包括:與客戶端建立長連接;向該消息服務器發(fā)出客戶端注冊請求,以使該消息服務器生成注冊信息,該注冊信息供該消息服務器確定該客戶端集合的客戶端數(shù)量。
在一些實施例中,該與客戶端建立長連接,包括:使用代理調度線程與客戶端建立通信連接;使用該代理調度線程根據(jù)均衡負載策略從代理執(zhí)行線程集合中選擇代理執(zhí)行線程,并將所建立的通信連接的連接句柄寫入至所選擇的代理執(zhí)行線程的連接隊列中;使用該代理調度線程向所選擇的代理執(zhí)行線程的管道發(fā)送觸發(fā)信息;使用該代理執(zhí)行線程響應于接收該觸發(fā)信息,從該連接隊列中讀取連接句柄,以接管該連接句柄對應的通信連接。
在一些實施例中,該執(zhí)行該遠程過程調用以向該客戶端集合推送該信息,包括:使用推送調度線程根據(jù)均衡負載策略從推送執(zhí)行線程集合中選擇推送執(zhí)行線程,并將該即時消息以及該遠程過程調用中待推送客戶端的客戶端信息分配至所選擇的推送執(zhí)行線程;使用該推送執(zhí)行線程將該即時消息以及該客戶端信息轉發(fā)至該代理調度線程;使用該代理調度線程在該連接隊列中查詢與客戶端信息對應的連接句柄所在的代理執(zhí)行線程,并將該即時消息傳輸給該代理執(zhí)行線程;使用該代理執(zhí)行線程通過該連接句柄對應的通信連接將該即時消息發(fā)送至對應的客戶端。
第三方面,本申請?zhí)峁┝艘环N用于推送即時消息的裝置,該裝置包括:接收單元,用于接收長連接服務器重定向的即時消息,其中該即時消息是與該長連接服務器已建立長連接的客戶端集合中的客戶端所發(fā)送的即時消息;確定單元,用于確定該客戶端集合的客戶端數(shù)量;設置單元,用于比較該客戶端數(shù)量與第一閾值,并根據(jù)比較結果將該即時消息設置為對應的消息類型,其中,該客戶端數(shù)量小于或等于第一閾值時對應的消息類型為反拉模式,該客戶端數(shù)量大于第一閾值時對應的消息類型為直推模式;發(fā)起單元,用于向該長連接服務器發(fā)起用于將已設置消息類型的該即時消息推送至該客戶端集合的遠程過程調用。
在一些實施例中,該發(fā)起單元,包括:確定子單元,用于確定該客戶端數(shù)量是否大于第二閾值;拆分子單元,用于若該客戶端數(shù)量大于第二閾值,則將該客戶端集合拆分成多個客戶端數(shù)量小于或等于第二閾值的客戶端子集;發(fā)起子單元,用于向該長連接服務器發(fā)起將已設置消息類型的該即時消息分別推送至各個客戶端子集的多個遠程過程調用。
在一些實施例中,該確定子單元進一步用于:根據(jù)注冊信息確定該客戶端集合的客戶端數(shù)量,其中,該注冊信息是響應于該長連接服務器與客戶端建立長連接時發(fā)送的客戶端注冊請求而生成的。
第四方面,本申請?zhí)峁┝艘环N用于推送即時消息的裝置,該裝置包括:消息接收單元,用于接收與該長連接服務器已建立長連接的客戶端集合中的客戶端所發(fā)送的即時消息;重定向單元,用于將該即時消息重定向至消息服務器;調用接收單元,用于接收該消息服務器在對該即時消息設置消息類型后、發(fā)起的將已設置消息類型的該即時消息推送至該客戶端集合的遠程過程調用;執(zhí)行單元,用于執(zhí)行該遠程過程調用以將該即時消息推送至該客戶端集合;其中,該消息類型是該消息服務器對該客戶端集合的客戶端數(shù)量與第一閾值進行比較并根據(jù)比較結果對該即時消息設置的,該客戶端數(shù)量小于第一閾值時對應的消息類型為反拉模式,該客戶端數(shù)量大于第一閾值時對應的消息類型為直推模式。
在一些實施例中,該調用接收單元進一步用于:接收該消息服務器發(fā)出的多個遠程過程調用,其中,每個遠程過程調用分別用于將已設置消息類型的該即時消息推送至該客戶端集合的不同客戶端子集,該客戶端子集是該消息服務器在該客戶端集合的客戶端數(shù)量大于第二閾值時對該客戶端集合進行劃分所得到的客戶端數(shù)量小于第二閾值的客戶端子集;以及該執(zhí)行單元進一步用于:依次執(zhí)行該多個遠程過程調用以按序將該即時消息推送到該客戶端集合的多個客戶端子集。
在一些實施例中,該裝置還包括客戶端注冊單元,該客戶端注冊單元包括:長連接建立子單元,用于與客戶端建立長連接;請求子單元,用于向該消息服務器發(fā)出客戶端注冊請求,以使該消息服務器生成注冊信息,該注冊信息供該消息服務器確定該客戶端集合的客戶端數(shù)量。
在一些實施例中,該長連接建立子單元進一步用于:使用代理調度線程與客戶端建立通信連接;使用該代理調度線程根據(jù)均衡負載策略從代理執(zhí)行線程集合中選擇代理執(zhí)行線程,并將所建立的通信連接的連接句柄寫入至所選擇的代理執(zhí)行線程的連接隊列中;使用該代理調度線程向所選擇的代理執(zhí)行線程的管道發(fā)送觸發(fā)信息;使用該代理執(zhí)行線程響應于接收該觸發(fā)信息,從該連接隊列中讀取連接句柄,以接管該連接句柄對應的通信連接。
在一些實施例中,該執(zhí)行單元進一步用于:使用推送調度線程根據(jù)均衡負載策略從推送執(zhí)行線程集合中選擇推送執(zhí)行線程,并將該即時消息以及該遠程過程調用中待推送客戶端的客戶端信息分配至所選擇的推送執(zhí)行線程;使用該推送執(zhí)行線程將該即時消息以及該客戶端信息轉發(fā)至該代理調度線程;使用該代理調度線程在該連接隊列中查詢與客戶端信息對應的連接句柄所在的代理執(zhí)行線程,并將該即時消息傳輸給該代理執(zhí)行線程;使用該代理執(zhí)行線程通過該連接句柄對應的通信連接將該即時消息發(fā)送至對應的客戶端。
本申請?zhí)峁┑挠糜谕扑图磿r消息的方法和裝置,通過與服務器建立長連接的客戶端數(shù)量確定推送即時消息的模式是反拉模式或直推模式,從而可以使得即時信息的推送模式可以匹配當前的場景,能滿足不同場景下對即時消息的不同傳輸要求。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:
圖1是本申請可以應用于其中的示例性系統(tǒng)架構圖;
圖2是根據(jù)本申請的用于推送即時消息的方法的一個實施例的流程圖;
圖3是根據(jù)本申請的用于推送即時消息的方法的又一個實施例的流程圖;
圖4a是根據(jù)圖3對應實施例的一個實現(xiàn)方式中與客戶端建立長連接時的交互示意圖;
圖4b是根據(jù)圖3對應實施例的一個實現(xiàn)方式中推送消息時的交互示意圖;
圖5是根據(jù)本申請的用于推送即時消息的裝置的一個實施例的結構示意圖;
圖6是根據(jù)本申請的用于推送即時消息的裝置的又一個實施例的結構示意圖;
圖7是適于用來實現(xiàn)本申請實施例的終端設備或服務器的計算機系統(tǒng)的結構示意圖。
具體實施方式
下面結合附圖和實施例對本申請作進一步的詳細說明??梢岳斫獾氖牵颂幩枋龅木唧w實施例僅僅用于解釋相關發(fā)明,而非對該發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與有關發(fā)明相關的部分。
需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結合實施例來詳細說明本申請。
圖1示出了可以應用本申請的用于推送即時消息的方法或用于推送即時消息的裝置的實施例的示例性系統(tǒng)架構100。
如圖1所示,系統(tǒng)架構100可以包括終端設備101、102、103,網(wǎng)絡104、106、長連接服務器105和消息服務器107。網(wǎng)絡104用以在終端設備101、102、103和長連接服務器105以及在長連接服務器105和消息服務器107之間提供通信鏈路的介質。網(wǎng)絡104、106可以包括各種連接類型,例如有線、無線通信鏈路或者光纖電纜等等。
用戶可以使用終端設備101、102、103通過網(wǎng)絡104與服務器105交互,以接收或發(fā)送消息等。終端設備101、102、103上可以安裝有各種通訊客戶端應用,例如視頻直播類應用、即時通信工具、郵箱客戶端、社交平臺軟件等。
終端設備101、102、103可以是具有顯示屏并且支持網(wǎng)頁瀏覽的各種電子設備,包括但不限于智能手機、平板電腦、電子書閱讀器、MP3播放器(Moving Picture Experts Group Audio Layer III,動態(tài)影像專家壓縮標準音頻層面3)、MP4(Moving Picture Experts Group Audio Layer IV,動態(tài)影像專家壓縮標準音頻層面4)播放器、膝上型便攜計算機和臺式計算機等等。
長連接服務器105可以是提供各種服務的服務器,可以從終端設備101、102、103接收信息并重定向至消息服務器107,消息服務器107可以對信息進行處理后將消息發(fā)送給長連接服務器105,由長連接服務器105將信息發(fā)送給終端設備101、102、103。
需要說明的是,圖2對應實施例所提供的用于推送即時消息的方法一般由消息服務器107執(zhí)行,相應地,圖5所示的用于推送即時消息的裝置一般設置于消息服務器107中;圖3對應實施例所提供的用于推送即時消息的方法一般由長連接服務器105執(zhí)行,相應地,圖6所示的用于推送即時消息的裝置一般設置于長連接服務器105中。
應該理解,圖1中的終端設備、網(wǎng)絡和服務器的數(shù)目僅僅是示意性的。根據(jù)實現(xiàn)需要,可以具有任意數(shù)目的終端設備、網(wǎng)絡和服務器。
繼續(xù)參考圖2,示出了根據(jù)本申請的用于推送即時消息的方法的一個實施例的流程200。該用于推送即時消息的方法,包括以下步驟:
步驟201,接收長連接服務器重定向的即時消息。
在本實施例中,用于推送即時消息的方法運行于其上的電子設備(例如圖1所示的消息服務器)可以通過有線連接方式或者無線連接方式從長連接服務器接收即時消息。該即時消息可以是與該長連接服務器建立長連接的客戶端發(fā)送的,該消息可以是文字、圖片、聲音、音頻或視頻等各種消息。長連接服務器在接收到該即時消息后,可以將該即時消息重定向至電子設備(即消息服務器)。長連接,指在一個連接上可以連續(xù)發(fā)送多個數(shù)據(jù)包,在連接保持期間,如果沒有數(shù)據(jù)包發(fā)送,需要雙方發(fā)鏈路檢測包。
通常,用戶利用終端上安裝的即時通信工具或視頻直播平臺等社交應用來瀏覽和交互信息,這時,用戶可以通過該社交應用直接輸入信息。
步驟202,確定客戶端集合的客戶端數(shù)量。
在本實施例中,電子設備可以通過各種方式確定與長連接服務器建立長連接的客戶端集合的客戶端數(shù)量。
在本實施例的一些可選實現(xiàn)方式中,步驟202可以包括:根據(jù)注冊信息確定客戶端集合的客戶端數(shù)量,其中,注冊信息是響應于長連接服務器與客戶端建立長連接時發(fā)送的客戶端注冊請求而生成的。
步驟203,比較客戶端數(shù)量與第一閾值,并根據(jù)比較結果將即時消息設置為對應的消息類型。
在本實施例中,用于推送即時消息的方法運行于其上的電子設備上可以首先將基于步驟203所得到的客戶端數(shù)量與第一閾值進行比較。之后,電子設備可以根據(jù)比較結果將即時消息設置為對應的消息類型。其中,客戶端數(shù)量小于或等于第一閾值時對應的消息類型為反拉模式,客戶端數(shù)量大于第一閾值時對應的消息類型為直推模式。反拉模式和直推模式是即時消息的兩種不同傳遞模式。反拉模式是在有新消息產生時,服務端給當前在線的客戶端發(fā)送一個通知,客戶端收到通知后,主動向服務端請求新消息的數(shù)據(jù)。反拉模式,可以保證消息投遞的準確性、時序性,但是一條消息的推送多了一次網(wǎng)絡交互,增大了消息傳送的時延,同時也給服務器增大了一倍的訪問壓力。直推模式在將一條消息推送到客戶端時只有一次網(wǎng)絡交互,后端服務器的推送壓力較小,延遲低,但是在服務高峰期會出現(xiàn)消息丟失,時序錯亂的問題。直推模式,則是有新消息產生時,服務端將消息體直接推送給在線的客戶端,服務端和客戶端不需要進行投遞成功的確認,屬于“盡力傳遞”。
步驟204,向長連接服務器發(fā)起用于將已設置消息類型的即時消息推送至客戶端集合的遠程過程調用。
在本實施例中,基于執(zhí)行步驟203所得到的已設置消息類型的即時消息,電子設備可以向長連接服務器發(fā)起用于將已設置消息類型的即時消息推送至客戶端集合的遠程過程調用。
在本實施例的一些可選實現(xiàn)方式中,步驟204可以包括:確定客戶端數(shù)量是否大于第二閾值;若客戶端數(shù)量大于第二閾值,則將客戶端集合拆分成多個客戶端數(shù)量小于或等于第二閾值的客戶端子集;向長連接服務器發(fā)起將已設置消息類型的即時消息分別推送至各個客戶端子集的多個遠程過程調用。
本申請的上述實施例提供的方法,通過與服務器建立長連接的客戶端數(shù)量確定推送即時消息的模式是反拉模式或直推模式,從而可以使得即時信息的推送模式可以匹配當前的場景,能滿足不同場景下對即時消息的不同傳輸要求。
進一步參考圖3,其示出了用于推送即時消息的方法的又一個實施例的流程300。該用于推送即時消息的方法的流程300,包括以下步驟:
步驟301,接收與長連接服務器已建立長連接的客戶端集合中的客戶端所發(fā)送的即時消息。
在本實施例中,用于推送即時消息的方法運行于其上的電子設備(例如圖1所示的長連接服務器)可以通過有線連接方式或者無線連接方式從用戶利用其進行信息交互的終端接收即時消息。
步驟302,將即時消息重定向至消息服務器。
在本實施例中,電子設備可以將步驟301所接收到的即時消息重定向至消息服務器。
步驟303,接收消息服務器在對即時消息設置消息類型后、發(fā)起的將已設置消息類型的即時消息推送至客戶端集合的遠程過程調用。
在本實施例中,基于步驟302重定向至消息服務器的即時消息,消息服務器可以對客戶端集合的客戶端數(shù)量與第一閾值進行比較并根據(jù)比較結果對該即時消息設置消息類型的。其中,當客戶端數(shù)量小于第一閾值時對應的消息類型為反拉模式,客戶端數(shù)量大于第一閾值時對應的消息類型為直推模式。之后,消息服務器可以向電子設備發(fā)起將已設置消息類型的即時消息推送至客戶端集合的遠程過程調用。如此,電子設備即可接收到該遠程過程調用。
步驟304,執(zhí)行遠程過程調用以將即時消息推送至客戶端集合。
在本實施例中,基于步驟303所接收到的遠程過程調用,電子設備可以執(zhí)行該遠程過程調用,從而可以將已設置好消息類型的該即時消息推送至客戶端集合。對于消息類型為直推模式的即時消息,長連接服務器直接將即時消息的消息內容推送至各個客戶端,客戶端即可展示消息內容。對于消息類型為直推模式的即時消息,長連接服務器可以首先將即時消息的更新消息推送至各個客戶端,客戶端可以在接收到更新消息向長連接服務器發(fā)送對新的即時消息的增量拉取請求,從而使長連接服務器在接收到給增量拉取請求后再向客戶端推送即時消息的消息內容。
在本實施例的一些可選實現(xiàn)方式中,上述步驟303可以包括:接收消息服務器發(fā)出的多個遠程過程調用,其中,每個遠程過程調用分別用于將已設置消息類型的即時消息推送至客戶端集合的不同客戶端子集,客戶端子集是消息服務器在客戶端集合的客戶端數(shù)量大于第二閾值時對客戶端集合進行劃分所得到的客戶端數(shù)量小于第二閾值的客戶端子集。此外,步驟304可以包括:依次執(zhí)行多個遠程過程調用以按序將即時消息推送到客戶端集合的多個客戶端子集。
在本實施例的一些可選實現(xiàn)方式中,上述方法還包括客戶端注冊步驟,該客戶端注冊步驟包括:與客戶端建立長連接;向消息服務器發(fā)出客戶端注冊請求,以使消息服務器生成注冊信息,注冊信息供消息服務器確定客戶端集合的客戶端數(shù)量。
在本實施例的一些可選實現(xiàn)方式中,上述與客戶端建立長連接,包括:使用代理調度線程與客戶端建立通信連接;使用代理調度線程根據(jù)均衡負載策略從代理執(zhí)行線程集合中選擇代理執(zhí)行線程,并將所建立的通信連接的連接句柄寫入至所選擇的代理執(zhí)行線程的連接隊列中;使用代理調度線程向所選擇的代理執(zhí)行線程的管道發(fā)送觸發(fā)信息;使用代理執(zhí)行線程響應于接收觸發(fā)信息,從連接隊列中讀取連接句柄,以接管連接句柄對應的通信連接。其中,負載均衡是將任務分攤到多個操作單元上進行執(zhí)行,從而共同完成工作任務。具體的負載均衡算法可以是輪詢法、隨機法、源地址哈希法、加權輪詢法、最小連接數(shù)法中的任意一種。
圖4a示出了該實現(xiàn)方式中長連接服務器與客戶端建立長連接的交互示意圖。如圖4a所示,這一過程可以包括如下步驟:首先,長連接服務器402中的代理調度線程(可命名為proxy_dispatcher)4021可以與客戶端建立通信連接;其次,代理調度線程4021可以根據(jù)負載均衡策略從代理執(zhí)行線程(可命名為proxy_worker)4022和代理執(zhí)行線程4023中選擇出代理執(zhí)行線程4023并將所建立的通信連接的連接句柄寫入至執(zhí)行線程4023的連接隊列;接著,代理調度線程4021可以向執(zhí)行線程4023的管道發(fā)送信息以觸發(fā)代理執(zhí)行線程讀取連接隊列中的連接句柄;之后,代理執(zhí)行線程4023即可通過讀取連接句柄接管上述通信連接。如此,長連接服務器402即可與客戶端最終建立長連接服務器。此外,在建立長連接后,代理執(zhí)行線程4023還可以回調消息服務器404所提供的服務以向回調消息服務器404發(fā)送注冊請求,從而在消息服務器404中對已建立長連接的客戶端進行注冊,生成注冊信息。
在本實施例的一些可選實現(xiàn)方式中,上述步驟304可以包括:使用推送調度線程根據(jù)均衡負載策略從推送執(zhí)行線程集合中選擇推送執(zhí)行線程,并將即時消息以及遠程過程調用中待推送客戶端的客戶端信息分配至所選擇的推送執(zhí)行線程;使用推送執(zhí)行線程將即時消息以及客戶端信息轉發(fā)至代理調度線程;使用代理調度線程在連接隊列中查詢與客戶端信息對應的連接句柄所在的代理執(zhí)行線程,并將即時消息傳輸給代理執(zhí)行線程;使用代理執(zhí)行線程通過連接句柄對應的通信連接將即時消息發(fā)送至對應的客戶端。
圖4b示出了該實現(xiàn)方式中推送消息時的交互示意圖。首先,當用戶通過客戶端401在所在用戶群組中發(fā)出即時消息時,客戶端401將該即時消息通過與長連接服務器402已建立的長連接發(fā)送至長連接服務器402中對應的代理執(zhí)行線程4023。接著,長連接服務器402的代理執(zhí)行線程4023將該即時消息重定向至消息服務器403。消息服務器403可以通過一系列操作設置消息類型并向長連接服務器402發(fā)起用于將已設置消息類型的即時消息推送至客戶端集合的遠程過程調用。其中,上述一系列操作可以包括:通過注冊信息查詢客戶端集合的客戶端數(shù)量;判斷客戶端數(shù)量是否大于500,若大于則將消息類型設置為直推模式,若不大于則將消息類型設置為反拉模式;之后,消息服務器403可以判斷客戶端數(shù)量是否大于4000,若小于則直接發(fā)起對已設置消息類型的即時消息推送至客戶端集合的遠程過程調用,若大于則將客戶端集合拆分成10個客戶端子集后將每個客戶端子集的任務子集提交到消息隊列并下發(fā)至推送任務。其中拆分的操作可以執(zhí)行多次直到每個客戶端子集中客戶端數(shù)量小于4000。在發(fā)起遠程過程調用時,消息服務器403可以將已設置消息類型的即時消息以及所推送的客戶端集合的客戶端信息發(fā)送至長連接服務器402的推送調度線程(可命名為push_dispatcher)4024,推送調度線程4024可以按照均衡負載策略從推送執(zhí)行線程(可命名為push_worker)4025和推送執(zhí)行線程4026選出推送執(zhí)行線程4025并將客戶端信息和即時消息分配給推送執(zhí)行線程4025。之后,處于推送進程的推送執(zhí)行線程4025可以通過進程間通信將客戶端信息和即時消息轉發(fā)給代理調度線程4021,代理調度線程4021可以根據(jù)客戶端信息選擇對應的代理執(zhí)行線程4022并將即時消息傳輸給代理執(zhí)行線程4022。最后,代理執(zhí)行線程4022可以通過對應的通信連接將即時消息推送給客戶端402。
從圖3中可以看出,通過與服務器建立長連接的客戶端數(shù)量確定推送即時消息的模式是反拉模式或直推模式,從而可以使得即時信息的推送模式可以匹配當前的場景,能滿足不同場景下對即時消息的不同傳輸要求。
進一步參考圖5,作為對上述各圖所示方法的實現(xiàn),本申請?zhí)峁┝艘环N用于推送即時消息的裝置的一個實施例,該裝置實施例與圖2所示的方法實施例相對應,該裝置具體可以應用于各種電子設備中。
如圖5所示,本實施例所描述的用于推送即時消息的裝置500包括:接收單元501、確定單元502、設置單元503和發(fā)起單元504。其中,接收單元501用于接收長連接服務器重定向的即時消息,其中即時消息是與長連接服務器已建立長連接的客戶端集合中的客戶端所發(fā)送的即時消息;確定單元502用于確定客戶端集合的客戶端數(shù)量;設置單元503用于比較客戶端數(shù)量與第一閾值,并根據(jù)比較結果將即時消息設置為對應的消息類型,其中,客戶端數(shù)量小于或等于第一閾值時對應的消息類型為反拉模式,客戶端數(shù)量大于第一閾值時對應的消息類型為直推模式;而發(fā)起單元504用于向長連接服務器發(fā)起用于將已設置消息類型的即時消息推送至客戶端集合的遠程過程調用。
在本實施例中,用于推送即時消息的裝置500的接收單元501、確定單元502、設置單元503和發(fā)起單元504的具體處理可以參考圖2對應實施例中的步驟201、步驟202、步驟203和步驟204,這里不再贅述。
在本實施例的一些可選實現(xiàn)方式中,發(fā)起單元504,包括:確定子單元(未示出),用于確定客戶端數(shù)量是否大于第二閾值;拆分子單元(未示出),用于若客戶端數(shù)量大于第二閾值,則將客戶端集合拆分成多個客戶端數(shù)量小于或等于第二閾值的客戶端子集;發(fā)起子單元(未示出),用于向長連接服務器發(fā)起將已設置消息類型的即時消息分別推送至各個客戶端子集的多個遠程過程調用。
在本實施例的一些可選實現(xiàn)方式中,確定子單元進一步用于:根據(jù)注冊信息確定客戶端集合的客戶端數(shù)量,其中,注冊信息是響應于長連接服務器與客戶端建立長連接時發(fā)送的客戶端注冊請求而生成的。
進一步參考圖6,作為對上述各圖所示方法的實現(xiàn),本申請?zhí)峁┝艘环N用于推送即時消息的裝置的一個實施例,該裝置實施例與圖4所示的方法實施例相對應,該裝置具體可以應用于各種電子設備中。
如圖6所示,本實施例所描述的用于推送即時消息的裝置600包括:消息接收單元601、重定向單元602、調用接收單元603和執(zhí)行單元604。其中,消息接收單元601用于接收與長連接服務器已建立長連接的客戶端集合中的客戶端所發(fā)送的即時消息;重定向單元602用于將即時消息重定向至消息服務器;調用接收單元603用于接收消息服務器在對即時消息設置消息類型后、發(fā)起的將已設置消息類型的即時消息推送至客戶端集合的遠程過程調用;而執(zhí)行單元604用于執(zhí)行遠程過程調用以將即時消息推送至客戶端集合,其中,消息類型是消息服務器對客戶端集合的客戶端數(shù)量與第一閾值進行比較并根據(jù)比較結果對即時消息設置的,客戶端數(shù)量小于第一閾值時對應的消息類型為反拉模式,客戶端數(shù)量大于第一閾值時對應的消息類型為直推模式。
在本實施例中,用于推送即時消息的裝置600的消息接收單元601、重定向單元602、調用接收單元603和執(zhí)行單元604的具體處理可以參考圖4對應實施例中的步驟401、步驟402、步驟403和步驟404,這里不再贅述。
在本實施例的一些可選實現(xiàn)方式中,調用接收單元603進一步用于:接收消息服務器發(fā)出的多個遠程過程調用,其中,每個遠程過程調用分別用于將已設置消息類型的即時消息推送至客戶端集合的不同客戶端子集,客戶端子集是消息服務器在客戶端集合的客戶端數(shù)量大于第二閾值時對客戶端集合進行劃分所得到的客戶端數(shù)量小于第二閾值的客戶端子集;以及執(zhí)行單元604進一步用于:依次執(zhí)行多個遠程過程調用以按序將即時消息推送到客戶端集合的多個客戶端子集。
在本實施例的一些可選實現(xiàn)方式中,裝置還包括客戶端注冊單元,客戶端注冊單元包括:長連接建立子單元,用于與客戶端建立長連接;請求子單元,用于向消息服務器發(fā)出客戶端注冊請求,以使消息服務器生成注冊信息,注冊信息供消息服務器確定客戶端集合的客戶端數(shù)量。
在本實施例的一些可選實現(xiàn)方式中,長連接建立子單元進一步用于:使用代理調度線程與客戶端建立通信連接;使用代理調度線程根據(jù)均衡負載策略從代理執(zhí)行線程集合中選擇代理執(zhí)行線程,并將所建立的通信連接的連接句柄寫入至所選擇的代理執(zhí)行線程的連接隊列中;使用代理調度線程向所選擇的代理執(zhí)行線程的管道發(fā)送觸發(fā)信息;使用代理執(zhí)行線程響應于接收觸發(fā)信息,從連接隊列中讀取連接句柄,以接管連接句柄對應的通信連接。
在本實施例的一些可選實現(xiàn)方式中,執(zhí)行單元進一步用于:使用推送調度線程根據(jù)均衡負載策略從推送執(zhí)行線程集合中選擇推送執(zhí)行線程,并將即時消息以及遠程過程調用中待推送客戶端的客戶端信息分配至所選擇的推送執(zhí)行線程;使用推送執(zhí)行線程將即時消息以及客戶端信息轉發(fā)至代理調度線程;使用代理調度線程在連接隊列中查詢與客戶端信息對應的連接句柄所在的代理執(zhí)行線程,并將即時消息傳輸給代理執(zhí)行線程;使用代理執(zhí)行線程通過連接句柄對應的通信連接將即時消息發(fā)送至對應的客戶端。
下面參考圖7,其示出了適于用來實現(xiàn)本申請實施例的終端設備或服務器的計算機系統(tǒng)700的結構示意圖。
如圖7所示,計算機系統(tǒng)700包括中央處理單元(CPU)701,其可以根據(jù)存儲在只讀存儲器(ROM)702中的程序或者從存儲部分708加載到隨機訪問存儲器(RAM)703中的程序而執(zhí)行各種適當?shù)膭幼骱吞幚怼T赗AM 703中,還存儲有系統(tǒng)700操作所需的各種程序和數(shù)據(jù)。CPU 701、ROM 702以及RAM 703通過總線704彼此相連。輸入/輸出(I/O)接口705也連接至總線704。
以下部件連接至I/O接口705:包括鍵盤、鼠標等的輸入部分706;包括諸如陰極射線管(CRT)、液晶顯示器(LCD)等以及揚聲器等的輸出部分707;包括硬盤等的存儲部分708;以及包括諸如LAN卡、調制解調器等的網(wǎng)絡接口卡的通信部分709。通信部分709經(jīng)由諸如因特網(wǎng)的網(wǎng)絡執(zhí)行通信處理。驅動器710也根據(jù)需要連接至I/O接口705??刹鹦督橘|711,諸如磁盤、光盤、磁光盤、半導體存儲器等等,根據(jù)需要安裝在驅動器710上,以便于從其上讀出的計算機程序根據(jù)需要被安裝入存儲部分708。
特別地,根據(jù)本公開的實施例,上文參考流程圖描述的過程可以被實現(xiàn)為計算機軟件程序。例如,本公開的實施例包括一種計算機程序產品,其包括有形地包含在機器可讀介質上的計算機程序,該計算機程序包含用于執(zhí)行流程圖所示的方法的程序代碼。在這樣的實施例中,該計算機程序可以通過通信部分709從網(wǎng)絡上被下載和安裝,和/或從可拆卸介質711被安裝。
附圖中的流程圖和框圖,圖示了按照本申請各種實施例的系統(tǒng)、方法和計算機程序產品的可能實現(xiàn)的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,該模塊、程序段、或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應當注意,在有些作為替換的實現(xiàn)中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個接連地表示的方框實際上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
描述于本申請實施例中所涉及到的單元可以通過軟件的方式實現(xiàn),也可以通過硬件的方式來實現(xiàn)。所描述的單元也可以設置在處理器中,例如,可以描述為:一種處理器包括接收單元、確定單元、設置單元和發(fā)起單元。其中,這些單元的名稱在某種情況下并不構成對該單元本身的限定,例如,發(fā)起單元還可以被描述為“接收用戶的網(wǎng)頁瀏覽請求向長連接服務器發(fā)起用于將已設置消息類型的即時消息推送至客戶端集合的遠程過程調用的單元”。
作為另一方面,本申請還提供了一種非易失性計算機存儲介質,該非易失性計算機存儲介質可以是上述實施例中裝置中所包含的非易失性計算機存儲介質;也可以是單獨存在,未裝配入終端中的非易失性計算機存儲介質。上述非易失性計算機存儲介質存儲有一個或者多個程序,當上述一個或者多個程序被一個設備執(zhí)行時,使得該設備:接收長連接服務器重定向的即時消息,其中所述即時消息是與所述長連接服務器已建立長連接的客戶端集合中的客戶端所發(fā)送的即時消息;確定所述客戶端集合的客戶端數(shù)量;比較所述客戶端數(shù)量與第一閾值,并根據(jù)比較結果將所述即時消息設置為對應的消息類型,其中,所述客戶端數(shù)量小于或等于第一閾值時對應的消息類型為反拉模式,所述客戶端數(shù)量大于第一閾值時對應的消息類型為直推模式;向所述長連接服務器發(fā)起用于將已設置消息類型的所述即時消息推送至所述客戶端集合的遠程過程調用?;蛘?,上述非易失性計算機存儲介質存儲有一個或者多個程序,當上述一個或者多個程序被一個設備執(zhí)行時,使得該設備:接收與所述長連接服務器已建立長連接的客戶端集合中的客戶端所發(fā)送的即時消息;將所述即時消息重定向至消息服務器;接收所述消息服務器在對所述即時消息設置消息類型后、發(fā)起的將已設置消息類型的所述即時消息推送至所述客戶端集合的遠程過程調用;執(zhí)行所述遠程過程調用以將所述即時消息推送至所述客戶端集合;其中,所述消息類型是所述消息服務器對所述客戶端集合的客戶端數(shù)量與第一閾值進行比較并根據(jù)比較結果對所述即時消息設置的,所述客戶端數(shù)量小于第一閾值時對應的消息類型為反拉模式,所述客戶端數(shù)量大于第一閾值時對應的消息類型為直推模式。
以上描述僅為本申請的較佳實施例以及對所運用技術原理的說明。本領域技術人員應當理解,本申請中所涉及的發(fā)明范圍,并不限于上述技術特征的特定組合而成的技術方案,同時也應涵蓋在不脫離所述發(fā)明構思的情況下,由上述技術特征或其等同特征進行任意組合而形成的其它技術方案。例如上述特征與本申請中公開的(但不限于)具有類似功能的技術特征進行互相替換而形成的技術方案。