專利名稱:一種數(shù)據(jù)包傳輸處理方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)傳輸領(lǐng)域,尤其涉及一種數(shù)據(jù)包傳輸處理方法及系統(tǒng)。
背景技術(shù):
目前,基于TCP網(wǎng)絡(luò)傳輸?shù)膽?yīng)用程序會(huì)出現(xiàn)粘包現(xiàn)象,即發(fā)送方發(fā)送的若干數(shù)據(jù)到接收方接收時(shí)粘成一包。對于這種粘包現(xiàn)象,通信服務(wù)器必須將粘在一起的包分開,然后進(jìn)行業(yè)務(wù)邏輯處理。由于通信服務(wù)器每接收到一個(gè)數(shù)據(jù)包都要進(jìn)行分包處理,因此,分包處理的效率成為制約整個(gè)通信服務(wù)器效率的關(guān)鍵因素之一。如果分包效率慢,不僅極大降低通信服務(wù)器處理消息的效率,還會(huì)導(dǎo)致內(nèi)存中積壓大量沒有處理的數(shù)據(jù)包,造成通信服務(wù)器崩潰。另外,數(shù)據(jù)包解析之后的業(yè)務(wù)邏輯的處理也很大程度上影響通信服務(wù)器的效率。
發(fā)明內(nèi)容
本發(fā)明提供一種數(shù)據(jù)包傳輸處理方法及系統(tǒng),以解決上述問題。本發(fā)明提供一種數(shù)據(jù)包傳輸處理方法。上述方法包括以下步驟=Socket線程接收待處理數(shù)據(jù)包;預(yù)處理線程拼接從緩沖區(qū)讀取的不完整數(shù)據(jù)包以及Socket線程接收的待處理數(shù)據(jù)包,通過正則表達(dá)式掃描拼接數(shù)據(jù)包以判斷拼接數(shù)據(jù)包是否匹配特定數(shù)據(jù)結(jié)構(gòu), 若拼接數(shù)據(jù)包匹配特定數(shù)據(jù)結(jié)構(gòu),則將匹配的完整數(shù)據(jù)包放入接收隊(duì)列;執(zhí)行裝置從接收隊(duì)列中調(diào)度完整數(shù)據(jù)包,并根據(jù)完整數(shù)據(jù)包的業(yè)務(wù)類型調(diào)用相應(yīng)的線程進(jìn)行處理,其中,業(yè)務(wù)類型具有優(yōu)先等級(jí),不同的業(yè)務(wù)類型由不同的線程對應(yīng)處理。本發(fā)明還提供一種數(shù)據(jù)包傳輸處理系統(tǒng),包括接收裝置、預(yù)處理裝置以及執(zhí)行裝置。接收裝置連接預(yù)處理裝置,預(yù)處理裝置連接執(zhí)行裝置。其中,接收裝置用于接收待處理數(shù)據(jù)包。預(yù)處理裝置用于拼接從緩沖區(qū)讀取的不完整數(shù)據(jù)包以及接收裝置接收的待處理數(shù)據(jù)包,通過正則表達(dá)式掃描拼接數(shù)據(jù)包以判斷拼接數(shù)據(jù)包是否匹配特定數(shù)據(jù)結(jié)構(gòu),若拼接數(shù)據(jù)包匹配特定數(shù)據(jù)結(jié)構(gòu),則將匹配的完整數(shù)據(jù)包放入接收隊(duì)列。執(zhí)行裝置用于從接收隊(duì)列中調(diào)度完整數(shù)據(jù)包,并根據(jù)完整數(shù)據(jù)包的業(yè)務(wù)類型調(diào)用相應(yīng)的線程進(jìn)行處理。其中,業(yè)務(wù)類型具有優(yōu)先等級(jí),不同的業(yè)務(wù)類型由不同的線程對應(yīng)處理。相較于先前技術(shù),根據(jù)本發(fā)明提供的數(shù)據(jù)包傳輸處理方法及系統(tǒng),預(yù)處理線程拼接從緩沖區(qū)讀取的不完整數(shù)據(jù)包以及Socket線程接收的待處理數(shù)據(jù)包,通過正則表達(dá)式掃描拼接數(shù)據(jù)包以判斷拼接數(shù)據(jù)包是否匹配特定數(shù)據(jù)結(jié)構(gòu),并將匹配得到的完整數(shù)據(jù)包放入接收隊(duì)列中。如此,提高了分包效率,防止內(nèi)存中積壓大量數(shù)據(jù)包導(dǎo)致通信服務(wù)器崩潰。 另外,執(zhí)行裝置從接收隊(duì)列中調(diào)度完整數(shù)據(jù)包,并根據(jù)完整數(shù)據(jù)包的業(yè)務(wù)類型調(diào)用相應(yīng)的線程進(jìn)行處理。如此,提高了業(yè)務(wù)的處理效率。
此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中
圖1所示為根據(jù)本發(fā)明的較佳實(shí)施例提供的數(shù)據(jù)包傳輸處理方法的流程圖;圖2所示為根據(jù)本發(fā)明的較佳實(shí)施例提供的數(shù)據(jù)包傳輸處理裝置的示意圖。
具體實(shí)施例方式下文中將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相互組合。圖1所示為根據(jù)本發(fā)明的較佳實(shí)施例提供的數(shù)據(jù)包傳輸處理方法的流程圖。如圖 1所示,本發(fā)明的較佳實(shí)施例提供的數(shù)據(jù)包傳輸處理方法包括步驟101 103。于步驟101,Socket線程接收待處理數(shù)據(jù)包。具體而言,Socket線程接收用戶發(fā)送的待處理數(shù)據(jù)包后,從線程池中取出預(yù)處理線程執(zhí)行后續(xù)步驟,而Socket線程立即返回繼續(xù)執(zhí)行下一個(gè)待處理數(shù)據(jù)包的接收任務(wù)。如此,提高了 Socket線程的接收效率。于步驟102,預(yù)處理線程拼接從緩沖區(qū)讀取的不完整數(shù)據(jù)包以及Socket線程接收的待處理數(shù)據(jù)包,通過正則表達(dá)式掃描所述拼接數(shù)據(jù)包以判斷所述拼接數(shù)據(jù)包是否匹配特定數(shù)據(jù)結(jié)構(gòu),若所述拼接數(shù)據(jù)包匹配特定數(shù)據(jù)結(jié)構(gòu),則將匹配的完整數(shù)據(jù)包放入接收隊(duì)列。于本實(shí)施例中,完整的數(shù)據(jù)包具有特定數(shù)據(jù)結(jié)構(gòu),上述特定數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)頭、 數(shù)據(jù)內(nèi)容以及數(shù)據(jù)尾。舉例而言,特定數(shù)據(jù)結(jié)構(gòu)以“〈root”開頭,以“/>”結(jié)尾,中間為任意不定長字符,如<root type =,text,from =,1,to =,2,say =,hello,/>。然而,本發(fā)明并不限定于此。于實(shí)際應(yīng)用中,任何以相應(yīng)固定字符開始和結(jié)尾的數(shù)據(jù)結(jié)構(gòu)均可定義為特定數(shù)據(jù)結(jié)構(gòu)。具體而言,預(yù)處理線程從緩沖區(qū)中取出不完整數(shù)據(jù)包,再將不完整數(shù)據(jù)包與 Socket線程接收的待處理數(shù)據(jù)包拼接,得到拼接數(shù)據(jù)包。接著,通過正則表達(dá)式宏觀掃描拼接數(shù)據(jù)包,判斷拼接數(shù)據(jù)包是否包含符合“〈root. . . />”的特定數(shù)據(jù)結(jié)構(gòu)。如果拼接數(shù)據(jù)包不具有上述特定數(shù)據(jù)結(jié)構(gòu),則將拼接數(shù)據(jù)包放入緩沖區(qū);如果拼接數(shù)據(jù)包具有上述特定數(shù)據(jù)結(jié)構(gòu),再用正則表達(dá)式微觀掃描拼接數(shù)據(jù)包,即將符合“〈root. . . />”特定數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)包放入接收隊(duì)列中,將不符合“〈root. . . />”特定數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)包放入緩沖區(qū),等待下一次數(shù)據(jù)拼接。舉例而言,Socket線程第一次接收的待處理數(shù)據(jù)包為<r00t from = ‘ sam' to =,sam,type =,text,say =,hello,/Xroot from =,sam,。第二次接收的待處理數(shù)據(jù)包為to =,sam,type =,text,say =,hello' /Xroot0第三次接收的待處理數(shù)據(jù)包為:from =,sam,to =,sam,type =,text,say =,hello,/Xroot from =,sam,to =,sam,type =,text,say =,hello,/>。于本實(shí)施例中,Socket線程第一次接收到待處理數(shù)據(jù)包后,預(yù)處理線程會(huì)從緩沖區(qū)中取出不完整數(shù)據(jù)包與所述待處理數(shù)據(jù)包進(jìn)行拼接。于此,由于緩沖區(qū)初始沒有數(shù)據(jù)包, 因此,預(yù)處理線程得到的拼接數(shù)據(jù)包<root from =,sam,to =,sam,type =,text,say =,hello' /Xrootfrom =,sam’。接著,正則表達(dá)式宏觀掃描上述拼接數(shù)據(jù)包會(huì)發(fā)現(xiàn)存在符合“〈root. . . />”數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)包“〈root from =,sam,to =,sam,type =,text,say =,hello' />”,然后用正則表達(dá)式微觀掃描上述拼接數(shù)據(jù)包,將獲得的完整數(shù)據(jù)包“〈root from =,sam,to =,sam,type =,text,say =,hello,/>,,放入接收隊(duì)列中,同時(shí)將"<root from=,sam””放入緩沖區(qū)中。
接著,于Socket線程第二次接收到待處理數(shù)據(jù)包后,預(yù)處理線程會(huì)從緩沖區(qū)中取出不完整數(shù)據(jù)包“〈root from=' sam””,將不完整數(shù)據(jù)包與此次接收的待處理數(shù)據(jù)包拼接后得到拼接數(shù)據(jù)包:<root from =,sam,to =,sam,type =,text,say =,hello,/Xroot。 接著,正則表達(dá)式宏觀掃描上述拼接數(shù)據(jù)包,發(fā)現(xiàn)存在符合“〈root. . . />”數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)包“〈root from = ‘ sam,to =,sam,type =,text,say =,hello,/>,,,然后用正貝Ij表達(dá)式微觀掃描上述拼接數(shù)據(jù)包,將獲得的完整數(shù)據(jù)包“〈root from=' sam' to =,sam' type =,text’ say =,hello' />”放入接收隊(duì)列中,同時(shí)將“〈root”放入緩沖區(qū)中。接著,于Socket線程第三次接收到待處理數(shù)據(jù)包后,預(yù)處理線程從緩沖區(qū)中取出不完整數(shù)據(jù)包“〈root”,將不完整數(shù)據(jù)包與此次接收到的待處理數(shù)據(jù)包拼接后得到拼接數(shù)據(jù)包:<rootfrom = , sam,to =,sam,type =,text,say =^helloVXroot from =,sam,to =,sam,type =,text,say = ^ hello,/>。接著,正則表達(dá)式宏觀掃描上述拼接數(shù)據(jù)包, 發(fā)現(xiàn)存在符合“〈root···/>”數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)包“〈root from=,sam,to =,sam,type =,text,say =^helloVXroot from =,sam,to =,sam,type =,text,say =,hell〇V>,,, 然后用正則表達(dá)式微觀掃描上述拼接數(shù)據(jù)包,將獲得的完整數(shù)據(jù)包“〈rootfrom =’ sam' to =,sam,type =,text,say =,hello,/>,,“〈root from =,sam,to =,sam,type =,text' say =’ hello' />”放入接收隊(duì)列中,同時(shí)清空緩沖區(qū)中的不完整數(shù)據(jù)包。于步驟103,執(zhí)行裝置從接收隊(duì)列中調(diào)度完整數(shù)據(jù)包,并根據(jù)完整數(shù)據(jù)包的業(yè)務(wù)類型調(diào)用相應(yīng)的線程進(jìn)行處理,其中,業(yè)務(wù)類型具有優(yōu)先等級(jí),不同的業(yè)務(wù)類型由不同的線程對應(yīng)處理。此外,當(dāng)執(zhí)行裝置檢測到處理優(yōu)先等級(jí)較高的業(yè)務(wù)類型的線程沒有空閑時(shí),執(zhí)行裝置調(diào)用優(yōu)先等級(jí)較低的業(yè)務(wù)類型對應(yīng)的線程處理優(yōu)先等級(jí)較高的業(yè)務(wù)類型。而且,于此, 執(zhí)行裝置定時(shí)檢測優(yōu)先等級(jí)較高的業(yè)務(wù)類型的實(shí)際線程借用時(shí)間,若實(shí)際線程借用時(shí)間等于或大于優(yōu)先等級(jí)較低的業(yè)務(wù)類型對應(yīng)的線程的可借用時(shí)間,則執(zhí)行裝置調(diào)用其他優(yōu)先等級(jí)較低的業(yè)務(wù)類型對應(yīng)的空閑線程處理優(yōu)先等級(jí)較高的業(yè)務(wù)類型。具體而言,執(zhí)行裝置存儲(chǔ)業(yè)務(wù)類型、線程以及線程可借用時(shí)間的對照表。所述對照表例如下表所示。
權(quán)利要求
1.一種數(shù)據(jù)包傳輸處理方法,其特征在于,包括以下步驟Socket線程接收待處理數(shù)據(jù)包;預(yù)處理線程拼接從緩沖區(qū)讀取的不完整數(shù)據(jù)包以及所述Socket線程接收的待處理數(shù)據(jù)包,通過正則表達(dá)式掃描拼接數(shù)據(jù)包以判斷所述拼接數(shù)據(jù)包是否匹配特定數(shù)據(jù)結(jié)構(gòu),若所述拼接數(shù)據(jù)包匹配特定數(shù)據(jù)結(jié)構(gòu),則將匹配的完整數(shù)據(jù)包放入接收隊(duì)列;執(zhí)行裝置從所述接收隊(duì)列中調(diào)度所述完整數(shù)據(jù)包,并根據(jù)所述完整數(shù)據(jù)包的業(yè)務(wù)類型調(diào)用相應(yīng)的線程進(jìn)行處理,其中,所述業(yè)務(wù)類型具有優(yōu)先等級(jí),不同的業(yè)務(wù)類型由不同的線程對應(yīng)處理。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)包傳輸處理方法,其特征在于,當(dāng)所述執(zhí)行裝置檢測到處理優(yōu)先等級(jí)較高的業(yè)務(wù)類型的線程沒有空閑時(shí),所述執(zhí)行裝置調(diào)用優(yōu)先等級(jí)較低的業(yè)務(wù)類型對應(yīng)的線程處理所述優(yōu)先等級(jí)較高的業(yè)務(wù)類型。
3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)包傳輸處理方法,其特征在于,所述執(zhí)行裝置定時(shí)檢測所述優(yōu)先等級(jí)較高的業(yè)務(wù)類型的實(shí)際線程借用時(shí)間,若所述實(shí)際線程借用時(shí)間等于或大于所述優(yōu)先等級(jí)較低的業(yè)務(wù)類型對應(yīng)的線程的可借用時(shí)間,則所述執(zhí)行裝置調(diào)用其他優(yōu)先等級(jí)較低的業(yè)務(wù)類型對應(yīng)的空閑線程處理所述優(yōu)先等級(jí)較高的業(yè)務(wù)類型。
4.根據(jù)權(quán)利要求2所述的數(shù)據(jù)包傳輸處理方法,其特征在于,于所述執(zhí)行裝置調(diào)用優(yōu)先等級(jí)較低的業(yè)務(wù)類型對應(yīng)的線程處理所述優(yōu)先等級(jí)較高的業(yè)務(wù)類型時(shí),所 >述執(zhí)行裝置開始定時(shí),且定時(shí)時(shí)間為所述優(yōu)先等級(jí)較低的業(yè)務(wù)類型對應(yīng)的線程的可借用時(shí)間,當(dāng)?shù)竭_(dá)所述定時(shí)時(shí)間時(shí),若所述優(yōu)先等級(jí)較高的業(yè)務(wù)類型仍由所述優(yōu)先等級(jí)較低的業(yè)務(wù)類型對應(yīng)的線程處理,則所述執(zhí)行裝置調(diào)用其他優(yōu)先等級(jí)較低的業(yè)務(wù)類型對應(yīng)的空閑線程處理所述優(yōu)先等級(jí)較高的業(yè)務(wù)類型。
5.根據(jù)權(quán)利要求1所述的數(shù)據(jù)包傳輸處理方法,其特征在于,所述完整數(shù)據(jù)包具有數(shù)據(jù)頭、數(shù)據(jù)內(nèi)容以及數(shù)據(jù)尾。
6.根據(jù)權(quán)利要求1所述的數(shù)據(jù)包傳輸處理方法,其特征在于,所述執(zhí)行裝置存儲(chǔ)業(yè)務(wù)類型、線程以及線程可借用時(shí)間的對照表。
7.一種數(shù)據(jù)包傳輸處理系統(tǒng),其特征在于,包括接收裝置、預(yù)處理裝置以及執(zhí)行裝置, 所述接收裝置連接所述預(yù)處理裝置,所述預(yù)處理裝置連接所述執(zhí)行裝置,其中,所述接收裝置用于接收待處理數(shù)據(jù)包,所述預(yù)處理裝置用于拼接從緩沖區(qū)讀取的不完整數(shù)據(jù)包以及所述接收裝置接收的待處理數(shù)據(jù)包,通過正則表達(dá)式掃描拼接數(shù)據(jù)包以判斷所述拼接數(shù)據(jù)包是否匹配特定數(shù)據(jù)結(jié)構(gòu),若所述拼接數(shù)據(jù)包匹配特定數(shù)據(jù)結(jié)構(gòu),則將匹配的完整數(shù)據(jù)包放入接收隊(duì)列,所述執(zhí)行裝置用于從所述接收隊(duì)列中調(diào)度所述完整數(shù)據(jù)包,并根據(jù)所述完整數(shù)據(jù)包的業(yè)務(wù)類型調(diào)用相應(yīng)的線程進(jìn)行處理,其中,所述業(yè)務(wù)類型具有優(yōu)先等級(jí),不同的業(yè)務(wù)類型由不同的線程對應(yīng)處理。
全文摘要
本發(fā)明提供一種數(shù)據(jù)包傳輸處理方法及系統(tǒng)。上述方法包括以下步驟Socket線程接收待處理數(shù)據(jù)包;預(yù)處理線程拼接從緩沖區(qū)讀取的不完整數(shù)據(jù)包以及Socket線程接收的待處理數(shù)據(jù)包,通過正則表達(dá)式掃描拼接數(shù)據(jù)包以判斷拼接數(shù)據(jù)包是否匹配特定數(shù)據(jù)結(jié)構(gòu),若拼接數(shù)據(jù)包匹配特定數(shù)據(jù)結(jié)構(gòu),則將匹配的完整數(shù)據(jù)包放入接收隊(duì)列;執(zhí)行裝置從接收隊(duì)列中調(diào)度完整數(shù)據(jù)包,并根據(jù)完整數(shù)據(jù)包的業(yè)務(wù)類型調(diào)用相應(yīng)的線程進(jìn)行處理,其中,業(yè)務(wù)類型具有優(yōu)先等級(jí),不同的業(yè)務(wù)類型由不同的線程對應(yīng)處理。
文檔編號(hào)H04L12/56GK102447628SQ20111043310
公開日2012年5月9日 申請日期2011年12月22日 優(yōu)先權(quán)日2011年12月22日
發(fā)明者胡加明 申請人:蘇州闊地網(wǎng)絡(luò)科技有限公司