一種基于分布式總線的消息處理方法、服務(wù)器和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種基于分布式總線的消息處理方法、服務(wù)器和系統(tǒng),屬于數(shù)據(jù)處理【技術(shù)領(lǐng)域】。所述方法包括:接收來自客戶端的請求數(shù)據(jù)包,并將請求數(shù)據(jù)包存入輸入消息隊列中;從輸入消息隊列的隊首開始,選取與空閑的消息處理線程數(shù)量相等的請求數(shù)據(jù)包,并采用空閑的消息處理線程分別對選取的請求數(shù)據(jù)包進行處理,得到應(yīng)答數(shù)據(jù)包;將應(yīng)答數(shù)據(jù)包發(fā)送給客戶端。本發(fā)明通過使用隊列來存放來自客戶端的請求數(shù)據(jù)包,根據(jù)空閑的消息處理線程的多少,從輸入消息隊列隊首開始選取相等數(shù)量的請求數(shù)據(jù)包進行處理,避免了在消息處理線程滿負荷的情況下,仍對接收到的請求數(shù)據(jù)包立刻進行處理,而造成的額外負荷以及數(shù)據(jù)丟失,從而提高了處理效率和整體性能。
【專利說明】一種基于分布式總線的消息處理方法、服務(wù)器和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理【技術(shù)領(lǐng)域】,特別涉及一種基于分布式總線的消息處理方法、服務(wù)器和系統(tǒng)。
【背景技術(shù)】
[0002]隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)應(yīng)用的種類越來越多,網(wǎng)絡(luò)應(yīng)用中客戶端通常會通過RPC (Remote Procedure Call Protocol,遠程過程調(diào)用協(xié)議)向遠端服務(wù)器請求相應(yīng)的服務(wù)。
[0003]RPC是一種通過網(wǎng)絡(luò)從遠程計算機程序上請求服務(wù)的協(xié)議??蛻舳送ㄟ^RPC從服務(wù)器調(diào)用服務(wù)過程大致如下:客戶端與服務(wù)器建立連接后,調(diào)用RPC接口函數(shù)向服務(wù)器發(fā)送攜帶有進程參數(shù)的調(diào)用信息,然后等待應(yīng)答消息;服務(wù)器通過相應(yīng)的服務(wù)器接口函數(shù)接收上述調(diào)用信息后,獲得該調(diào)用信息中的進程參數(shù),調(diào)用進程執(zhí)行操作,并將操作結(jié)果作為應(yīng)答消息返回給客戶端,完成調(diào)用。
[0004]在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:
[0005]服務(wù)器在接收到調(diào)用信息就立即開始處理,在面對海量用戶接入的情況時,由于需要處理的數(shù)據(jù)量過大,而服務(wù)器的處理能力有限,這樣就增加了服務(wù)器的負載,降低了系統(tǒng)的工作能力,同時還可能造成調(diào)用信息丟失。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有技術(shù)的問題,本發(fā)明實施例提供了一種基于分布式總線的消息處理方法、服務(wù)器和系統(tǒng)。所述技術(shù)方案如下:
[0007]—方面,本發(fā)明實施例提供了一種基于分布式總線的消息處理方法,所述方法包括:
[0008]接收來自客戶端的請求數(shù)據(jù)包,并將所述請求數(shù)據(jù)包存入輸入消息隊列中;
[0009]從所述輸入消息隊列的隊首開始,選取與空閑的消息處理線程數(shù)量相等的所述請求數(shù)據(jù)包,并采用所述空閑的消息處理線程分別對選取的所述請求數(shù)據(jù)包進行處理,得到應(yīng)答數(shù)據(jù)包;
[0010]將所述應(yīng)答數(shù)據(jù)包發(fā)送給所述客戶端。
[0011]其中,所述接收來自客戶端的請求數(shù)據(jù)包,包括:
[0012]與所述客戶端建立連接,并將建立連接后的所述客戶端標記為連接狀態(tài);
[0013]與處于連接狀態(tài)的所述客戶端建立會話并將建立會話后的所述客戶端標記為會話狀態(tài),以接收處于會話狀態(tài)的所述客戶端發(fā)送的請求數(shù)據(jù)包。
[0014]進一步地,所述與處于連接狀態(tài)的所述客戶端建立會話之前,所述方法還包括:
[0015]判斷是否有會話處于空閑狀態(tài);
[0016]若有會話處于空閑狀態(tài),則與處于連接狀態(tài)的所述客戶端建立會話;否則,讓所述客戶端排隊等待空閑的會話,并將排隊等待的所述客戶端標記為會話排隊狀態(tài)。[0017]進一步地,所述方法還包括:
[0018]當處于會話狀態(tài)的所述客戶端異常斷開時,將與異常斷開的所述客戶端對應(yīng)的會話變?yōu)楸Wo狀態(tài)。
[0019]進一步地,在所述判斷是否有會話處于空閑狀態(tài)之前,所述方法還包括:
[0020]判斷是否有與處于連接狀態(tài)的所述客戶端對應(yīng)的處于保護狀態(tài)的會話,若有,則直接與處于連接狀態(tài)的客戶端建立會話。
[0021]進一步地,所述方法還包括:
[0022]在收到處于連接狀態(tài)的所述客戶端的嘗試會話請求時,若所述客戶端已存在進行中的會話,則斷開與所述進行中的會話對應(yīng)的舊連接,并讓所述會話與新連接關(guān)聯(lián)。
[0023]其中,所述請求數(shù)據(jù)包為基于二進制通信協(xié)議的數(shù)據(jù)包。
[0024]進一步地,所述請求數(shù)據(jù)包的包頭的格式為:
[0025]
【權(quán)利要求】
1.一種基于分布式總線的消息處理方法,其特征在于,所述方法包括: 接收來自客戶端的請求數(shù)據(jù)包,并將所述請求數(shù)據(jù)包存入輸入消息隊列中; 從所述輸入消息隊列的隊首開始,選取與空閑的消息處理線程數(shù)量相等的所述請求數(shù)據(jù)包,并采用所述空閑的消息處理線程分別對選取的所述請求數(shù)據(jù)包進行處理,得到應(yīng)答數(shù)據(jù)包; 將所述應(yīng)答數(shù)據(jù)包發(fā)送給所述客戶端。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述接收來自客戶端的請求數(shù)據(jù)包,包括: 與所述客戶端建立連接,并將建立連接后的所述客戶端標記為連接狀態(tài); 與處于連接狀態(tài)的所述客戶端建立會話并將建立會話后的所述客戶端標記為會話狀態(tài),以接收處于會話狀態(tài)的所述客戶端發(fā)送的請求數(shù)據(jù)包。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述與處于連接狀態(tài)的所述客戶端建立會話之前,所述方法還包括: 判斷是否有會話處于空閑狀態(tài); 若有會話處于空閑狀態(tài),則與處于連接狀態(tài)的所述客戶端建立會話;否則,讓所述客戶端排隊等待空閑的會話,并將排隊等待的所述客戶端標記為會話排隊狀態(tài)。
4.根據(jù)權(quán)·利要求3所述的方法,其特征在于,所述方法還包括:· 當處于會話狀態(tài)的所述客戶端異常斷開時,將與異常斷開的所述客戶端對應(yīng)的會話變?yōu)楸Wo狀態(tài)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,在所述判斷是否有會話處于空閑狀態(tài)之前,所述方法還包括: 判斷是否有與處于連接狀態(tài)的所述客戶端對應(yīng)的處于保護狀態(tài)的會話,若有,則直接與處于連接狀態(tài)的客戶端建立會話。
6.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述方法還包括: 在收到處于連接狀態(tài)的所述客戶端的嘗試會話請求時,若所述客戶端已存在進行中的會話,則斷開與所述進行中的會話對應(yīng)的舊連接,并讓所述會話與新連接關(guān)聯(lián)。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述請求數(shù)據(jù)包為基于二進制通信協(xié)議的數(shù)據(jù)包。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述請求數(shù)據(jù)包的包頭的格式為:
9.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 判斷是否能夠提供所述請求數(shù)據(jù)包中請求的服務(wù); 若不能提供所述請求數(shù)據(jù)包中請求的服務(wù),則轉(zhuǎn)發(fā)所述請求數(shù)據(jù)包。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將所述應(yīng)答數(shù)據(jù)包發(fā)送給所述客戶端,包括:將各個所述消息處理線程得到的所述應(yīng)答數(shù)據(jù)包分別存放在所述消息處理線程對應(yīng)的輸出消息隊列中; 從所述輸出消息隊列中讀取所述應(yīng)答數(shù)據(jù)包并發(fā)送給所述客戶端。
11.一種基于分布式總線的服務(wù)器,其特征在于,所述服務(wù)器包括: 接收模塊,用于接收來自客戶端的請求數(shù)據(jù)包,并將所述請求數(shù)據(jù)包存入輸入消息隊列中; 存儲模塊,用于存儲所述輸入消息隊列; 消息處理模塊,用于從所述輸入消息隊列的隊首開始,選取與空閑的消息處理線程數(shù)量相等的所述請求數(shù)據(jù)包,并采用所述空閑的消息處理線程分別對選取的所述請求數(shù)據(jù)包進行處理,得到應(yīng)答數(shù)據(jù)包; 發(fā)送模塊,用于將所述應(yīng)答數(shù)據(jù)包發(fā)送給所述客戶端。
12.根據(jù)權(quán)利要求11所述的服務(wù)器,其特征在于,所述接收模塊,包括: 連接建立單元,用于與所述客戶端建立連接,并將建立連接后的所述客戶端標記為連接狀態(tài); 會話建立單元,用于與處于連接狀態(tài)的所述客戶端建立會話并將建立會話后的所述客戶端標記為會話狀態(tài),以接收處于會話狀態(tài)的所述客戶端發(fā)送的請求數(shù)據(jù)包。
13.根據(jù)權(quán)利要求12所述的服務(wù)器,其特征在于,所述會話建立單元用于, 判斷是否有會話處于空閑狀態(tài); 若有會話處于空閑狀態(tài),則與處于連接狀態(tài)的所述客戶端建立會話;否則,讓所述客戶端排隊等待空閑的會話,并將排隊等待的所述客戶端標記為會話排隊狀態(tài)。
14.根據(jù)權(quán)利要求13所述的服務(wù)器,其特征在于,所述會話建立單元還用于, 當處于會話狀態(tài)的所述客戶端異常斷開時,將與異常斷開的所述客戶端對應(yīng)的會話變?yōu)楸Wo狀態(tài)。
15.根據(jù)權(quán)利要求14所述的服務(wù)器,其特征在于,所述會話建立單元還用于, 判斷是否有與處于連接狀態(tài)的所述客戶端對應(yīng)的處于保護狀態(tài)的會話,若有,則直接與處于連接狀態(tài)的客戶端建立會話。
16.根據(jù)權(quán)利要求12所述的服務(wù)器,其特征在于,所述會話建立單元還用于, 在收到處于連接狀態(tài)的所述客戶端的嘗試會話請求時,若所述客戶端已存在進行中的會話,則斷開與所述進行中的會話對應(yīng)的舊連接,并讓所述會話與新連接關(guān)聯(lián)。
17.根據(jù)權(quán)利要求11所述的服務(wù)器,其特征在于,所述發(fā)送模塊用于, 將各個所述消息處理線程得到的所述應(yīng)答數(shù)據(jù)包分別存放在所述消息處理線程對應(yīng)的輸出消息隊列中; 從所述輸出隊列中讀取所述應(yīng)答數(shù)據(jù)包并發(fā)送給所述客戶端; 相應(yīng)地,所述存儲模塊還用于,存儲所述輸出消息隊列。
18.根據(jù)權(quán)利要求11所述的服務(wù)器,其特征在于,所述服務(wù)器還包括: 設(shè)置模塊,用于設(shè)置最大連接數(shù)和最大會話數(shù),所述最大連接數(shù)是指與所述客戶端之間可以同時建立的連接的數(shù)量的最大值,所述最大會話數(shù)是指與所述客戶端之間可以同時進行的會話的數(shù)量的最大值。
19.一種基于分布式總線的消息處理系統(tǒng),其特征在于,所述系統(tǒng)包括總線和至少一個如權(quán)利要求11-18中任一項所述的服務(wù) 器,所述服務(wù)器通過所述總線連接。
【文檔編號】H04L29/08GK103856440SQ201210499433
【公開日】2014年6月11日 申請日期:2012年11月29日 優(yōu)先權(quán)日:2012年11月29日
【發(fā)明者】林愛民, 張遷 申請人:騰訊科技(深圳)有限公司