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