一種處理報(bào)文的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)領(lǐng)域,尤其涉及一種基于長(zhǎng)連接用于處理報(bào)文的方法。
【背景技術(shù)】
[0002]傳統(tǒng)的TR-069 (CPE廣域網(wǎng)管理協(xié)議)客戶(hù)端普遍是基于會(huì)話(huà)機(jī)制與服務(wù)器短連接,為了解決服務(wù)器控制內(nèi)網(wǎng)TR-069客戶(hù)端的問(wèn)題,需要將原本在開(kāi)始會(huì)話(huà)時(shí)建立連接在結(jié)束會(huì)話(huà)時(shí)斷開(kāi)連接的短連接改為客戶(hù)端啟動(dòng)后主動(dòng)連接服務(wù)器且連接建立后連接一直保持不斷的長(zhǎng)連接。雖然長(zhǎng)連接的引入解決服務(wù)器控制內(nèi)網(wǎng)TR-069客戶(hù)端的問(wèn)題,但卻引入了另一個(gè)問(wèn)題:原本的會(huì)話(huà)機(jī)制無(wú)法正確工作,并且要求服務(wù)器和客戶(hù)端必須按照順序交互報(bào)文,只能等一個(gè)交互會(huì)話(huà)結(jié)束后才能開(kāi)始另一個(gè)會(huì)話(huà),如圖1所示:服務(wù)器(Server)向客戶(hù)端(Client)發(fā)送一空?qǐng)?bào)文以通知客戶(hù)端開(kāi)始會(huì)話(huà)(sess1n),客戶(hù)端通知(Inform)服務(wù)器準(zhǔn)備就緒,服務(wù)器通過(guò)遠(yuǎn)程過(guò)程調(diào)用協(xié)議(Remote Procedure Call Protocol,RPC)向客戶(hù)端發(fā)送處理報(bào)文,客戶(hù)端將處理報(bào)文進(jìn)行處理并通過(guò)RPC協(xié)議向服務(wù)器回復(fù)處理結(jié)果,服務(wù)器向客戶(hù)端發(fā)送通知響應(yīng)(Inform Response),結(jié)束會(huì)話(huà)。一旦會(huì)話(huà)亂序就會(huì)導(dǎo)致客戶(hù)端處理異常。但由于長(zhǎng)連接一直處于連接狀態(tài)的特點(diǎn),致使只要上層有需要就會(huì)通過(guò)服務(wù)器向客戶(hù)端發(fā)送報(bào)文,因此會(huì)發(fā)生如圖2所示的會(huì)話(huà)錯(cuò)誤(sess1n error)。
【發(fā)明內(nèi)容】
[0003]針對(duì)現(xiàn)有的基于會(huì)話(huà)機(jī)制的長(zhǎng)連接存在的上述問(wèn)題,現(xiàn)提供一種旨在實(shí)現(xiàn)基于長(zhǎng)連接可避免報(bào)文交互過(guò)程中出錯(cuò)情形的處理報(bào)文的方法。
[0004]具體技術(shù)方案如下:
[0005]一種處理報(bào)文的方法,用于基于CPE廣域網(wǎng)管理協(xié)議的客戶(hù)端,包括下述步驟:
[0006]S1.所述客戶(hù)端與一服務(wù)器建立長(zhǎng)連接;
[0007]S2.所述客戶(hù)端監(jiān)聽(tīng)所述長(zhǎng)連接是否有數(shù)據(jù)包傳送,若是,執(zhí)行步驟S3 ;若否,執(zhí)行步驟S4 ;
[0008]S3.所述客戶(hù)端對(duì)所述數(shù)據(jù)包進(jìn)行解析,根據(jù)解析結(jié)果創(chuàng)建對(duì)應(yīng)的任務(wù),并將所述任務(wù)添加至一預(yù)設(shè)的隊(duì)列中,返回執(zhí)行所述步驟S2 ;
[0009]S4.所述客戶(hù)端根據(jù)預(yù)設(shè)的所述隊(duì)列的順序逐條處理所述隊(duì)列中的所述任務(wù),并將所述任務(wù)的處理結(jié)果發(fā)送至所述服務(wù)器,返回執(zhí)行所述步驟S2。
[0010]優(yōu)選的,在執(zhí)行所述S3之前,還包括:
[0011]所述客戶(hù)端提供一緩沖區(qū)用以存儲(chǔ)接收到的所述數(shù)據(jù)包,并從所述緩存區(qū)中讀取所述數(shù)據(jù)包。
[0012]優(yōu)選的,每一所述數(shù)據(jù)包中包括復(fù)數(shù)條報(bào)文,每一條所述報(bào)文對(duì)應(yīng)一條所述任務(wù)。
[0013]優(yōu)選的,所述步驟S3包括:
[0014]S31.所述客戶(hù)端對(duì)所述數(shù)據(jù)包進(jìn)行解析,獲取所述數(shù)據(jù)包中的復(fù)數(shù)條所述報(bào)文;
[0015]S32.所述客戶(hù)端根據(jù)獲取的所述報(bào)文創(chuàng)建與所述報(bào)文對(duì)應(yīng)的所述任務(wù);
[0016]S33.所述客戶(hù)端根據(jù)所述數(shù)據(jù)包的包頭指示的順序,將所述報(bào)文對(duì)應(yīng)的所述任務(wù)添加于所述隊(duì)列中。
[0017]優(yōu)選的,在執(zhí)行所述步驟S4之前還包括:
[0018]判斷所述隊(duì)列中是否存在未執(zhí)行的所述任務(wù),若是,執(zhí)行所述步驟S4 ;若否,返回執(zhí)行所述步驟S2。
[0019]優(yōu)選的,在所述步驟S4中,每處理一條所述任務(wù),將所述任務(wù)的處理結(jié)果發(fā)送至所述服務(wù)器。
[0020]優(yōu)選的,在所述步驟S4中,根據(jù)所述隊(duì)列的順序逐條將所述隊(duì)列中的所有所述任務(wù)處理完成后,根據(jù)所述隊(duì)列的順序逐一將每條所述任務(wù)的處理結(jié)果發(fā)送至所述服務(wù)器。
[0021]優(yōu)選的,所述步驟S4中,還包括:
[0022]提供一預(yù)定周期;
[0023]所述步驟S4中,于所述預(yù)定周期內(nèi),根據(jù)所述隊(duì)列的順序,逐條執(zhí)行所述隊(duì)列中的所述任務(wù),并將每條所述任務(wù)的處理結(jié)果發(fā)送至所述服務(wù)器。
[0024]上述技術(shù)方案的有益效果:
[0025]本技術(shù)方案中,處理報(bào)文的方法用于監(jiān)聽(tīng)長(zhǎng)連接是否有數(shù)據(jù)包傳輸,當(dāng)有數(shù)據(jù)包傳輸時(shí),對(duì)數(shù)據(jù)包進(jìn)行解析,根據(jù)解析結(jié)果創(chuàng)建任務(wù),并將任務(wù)添加于預(yù)設(shè)的隊(duì)列中;當(dāng)沒(méi)有數(shù)據(jù)包傳輸時(shí),集中處理隊(duì)列中的所有任務(wù),并將處理結(jié)果發(fā)送至服務(wù)器,避免了報(bào)文交互過(guò)程中容易出錯(cuò)的情形,提高了通道利用率。
【附圖說(shuō)明】
[0026]圖1為現(xiàn)有的會(huì)話(huà)機(jī)制的交互圖;
[0027]圖2為現(xiàn)有的會(huì)話(huà)機(jī)制層出錯(cuò)場(chǎng)景交互圖;
[0028]圖3為本發(fā)明的任務(wù)隊(duì)列機(jī)制的交互圖;
[0029]圖4為本發(fā)明所述的處理報(bào)文的方法的第一種實(shí)施例的方法流程圖;
[0030]圖5為本發(fā)明所述的處理報(bào)文的方法的第二種實(shí)施例的方法流程圖;
[0031]圖6為本發(fā)明所述的處理報(bào)文的方法的第三種實(shí)施例的方法流程圖;
[0032]圖7為本發(fā)明所述的處理報(bào)文的方法的第四種實(shí)施例的方法流程圖。
【具體實(shí)施方式】
[0033]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0034]需要說(shuō)明的是,在不沖突的情況下,本發(fā)明中的實(shí)施例及實(shí)施例中的特征可以相互組合。
[0035]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明,但不作為本發(fā)明的限定。
[0036]本發(fā)明基于如下發(fā)現(xiàn):
[0037]現(xiàn)有的長(zhǎng)連接主要基于原始TR-069客戶(hù)端的會(huì)話(huà)機(jī)制,原始的會(huì)話(huà)機(jī)制主要是為了保證報(bào)文順序不亂序,如圖1所示。但是基于長(zhǎng)連接的客戶(hù)端如果要處理服務(wù)器下發(fā)的并發(fā)無(wú)序報(bào)文,會(huì)發(fā)生如圖2所示的會(huì)話(huà)錯(cuò)誤。因此需要改進(jìn)長(zhǎng)連接的處理機(jī)制??赏ㄟ^(guò)如下三種方法進(jìn)行改進(jìn):
[0038]第一種方法:用多進(jìn)程的方法,通過(guò)子進(jìn)程處理會(huì)話(huà),這樣多個(gè)會(huì)話(huà)可以并發(fā);
[0039]第二種方法:使用多線程,每個(gè)線程處理一個(gè)會(huì)話(huà);
[0040]第三種方法:使用單進(jìn)程并采用任務(wù)隊(duì)列方式。
[0041]上述第一種方法和第二種方法對(duì)硬件要求較高,適合在多核,大內(nèi)存的處理平臺(tái)上使用。目前很多大型服務(wù)器是使用多進(jìn)程,多線程方法來(lái)處理十萬(wàn)級(jí),百萬(wàn)級(jí)的并發(fā)訪問(wèn)。而對(duì)于家庭網(wǎng)關(guān)這種網(wǎng)絡(luò)終端設(shè)備,處理能力有限,并且并發(fā)數(shù)不會(huì)太多,多進(jìn)程或多線程的處理方法會(huì)額外開(kāi)銷(xiāo)系統(tǒng)資源。所以本發(fā)明采取第三種方法,即采用任務(wù)隊(duì)列的方式,以避免多條報(bào)文交互過(guò)程中出錯(cuò)的情形。
[0042]如圖3-4所示,一種處理報(bào)文的方法,用于基于CPE廣域網(wǎng)管理協(xié)議的客戶(hù)端,包括下述步驟:
[0043]S1.客戶(hù)端與一服務(wù)器建立長(zhǎng)連接;
當(dāng)前第1頁(yè)
1 
2