數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法和裝置的制造方法
【專利摘要】本申請公開了數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法和裝置。所述方法的一【具體實施方式】包括:接收數(shù)據(jù)報文,同時讀取所述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值;判斷所述長度值是否小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度;響應于所述長度值小于或者等于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀?。豁憫谒鲩L度值大于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀??;將讀取的數(shù)據(jù)存放在用戶緩存區(qū)中,當所述用戶緩存區(qū)中的數(shù)據(jù)達到預設容量閾值,將所述用戶緩存區(qū)中的數(shù)據(jù)發(fā)送給終端。該實施方式實現(xiàn)了快速、高效的轉(zhuǎn)發(fā)數(shù)據(jù)報文。
【專利說明】
數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法和裝置
技術領域
[0001]本申請涉及計算機技術領域,具體涉及互聯(lián)網(wǎng)技術領域,尤其涉及數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法和和裝置。
【背景技術】
[0002]數(shù)據(jù)報文,是通過一定的技術標準或協(xié)議,在互聯(lián)網(wǎng)中用于交換與傳輸?shù)臄?shù)據(jù)單元。數(shù)據(jù)報文中包含了將要發(fā)送的完整的數(shù)據(jù)信息,其長短不一致,長度不限且可變。數(shù)據(jù)報文的高效轉(zhuǎn)發(fā)可提高數(shù)據(jù)的傳輸速度,合理利用資源。
[0003]然而,現(xiàn)有的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方式通常是在將數(shù)據(jù)報文全部讀取完畢后再進行轉(zhuǎn)發(fā),使得終端處于空閑等待的時間過長,同時在讀取數(shù)據(jù)報文時,不能很好的根據(jù)傳輸控制協(xié)議的長度合理的分配數(shù)據(jù)一次傳輸?shù)拈L度,造成資源浪費,讀取速度慢的問題。
【發(fā)明內(nèi)容】
[0004]本申請的目的在于提出一種改進的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法和裝置,來解決以上【背景技術】部分提到的技術問題。
[0005]第一方面,本申請?zhí)峁┝艘环N數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法,所述方法包括:接收數(shù)據(jù)報文,同時讀取所述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值;判斷所述長度值是否小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度;響應于所述長度值小于或者等于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀??;響應于所述長度值大于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀取;將讀取的數(shù)據(jù)存放在用戶緩存區(qū)中,當所述用戶緩存區(qū)中的數(shù)據(jù)達到預設容量閾值,將所述用戶緩存區(qū)中的數(shù)據(jù)發(fā)送給終端。
[0006]在一些實施例中,所述響應于所述長度值小于或者等于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀取,包括:根據(jù)所述最大報文段長度,將所述數(shù)據(jù)報文封裝成至少一個數(shù)據(jù)片段;將所述至少一個數(shù)據(jù)片段中的每一個數(shù)據(jù)片段通過數(shù)據(jù)拷貝的方式拷貝到用戶空間;在所述至少一個數(shù)據(jù)片段全部拷貝到所述用戶空間之后,對所述至少一個數(shù)據(jù)片段解封裝。
[0007]在一些實施例中,所述在所述至少一個數(shù)據(jù)片段全部拷貝到所述用戶空間之后,對所述至少一個數(shù)據(jù)片段解封裝,包括:從拷貝到所述用戶空間的各個數(shù)據(jù)片段中按照拷貝時間從先到后的順序依次確定每一個數(shù)據(jù)片段中各行的數(shù)據(jù)長度,其中,所述各行的數(shù)據(jù)長度是用于存放各行數(shù)據(jù)內(nèi)容長度值的定長數(shù)據(jù)長度加上各行的數(shù)據(jù)內(nèi)容長度;根據(jù)所述各行的數(shù)據(jù)長度,確定各行的數(shù)據(jù)內(nèi)容。
[0008]在一些實施例中,所述從拷貝到所述用戶空間的各個數(shù)據(jù)片段中按照拷貝時間從先到后的順序依次確定每一個數(shù)據(jù)片段中各行的數(shù)據(jù)長度,包括:讀取所述定長數(shù)據(jù)長度;通過讀取所述定長數(shù)據(jù)長度,確定各行數(shù)據(jù)內(nèi)容的長度值;由所述各行數(shù)據(jù)內(nèi)容的長度值,確定所述各行數(shù)據(jù)內(nèi)容的長度。
[0009]在一些實施例中,所述將所述至少一個數(shù)據(jù)片段中的每一個數(shù)據(jù)片段通過數(shù)據(jù)拷貝的方式拷貝到用戶空間,包括:將所述數(shù)據(jù)片段通過直接存儲器訪問的方式從協(xié)議引擎拷貝到內(nèi)核空間下的套接字緩沖區(qū);將拷貝到套接字緩沖區(qū)中的數(shù)據(jù)片段拷貝到用戶空間下的所述用戶緩存區(qū)中。
[0010]在一些實施例中,所述響應于所述長度值大于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀取,包括:按照行數(shù)從大到小的順序依次讀取所述數(shù)據(jù)報文的各行數(shù)據(jù)并存放在所述用戶空間的用戶緩存區(qū)中;根據(jù)讀取到的所述各行的數(shù)據(jù)長度,確定各行的數(shù)據(jù)內(nèi)容。
[0011]在一些實施例中,所述將讀取的數(shù)據(jù)存放在用戶緩存區(qū)中,當所述用戶緩存區(qū)中的數(shù)據(jù)達到預設容量閾值,將所述用戶緩存區(qū)中的數(shù)據(jù)發(fā)送給終端,包括:將讀取的所述數(shù)據(jù)報文的數(shù)據(jù)長度值進行累加,直到達到所述用戶緩存區(qū)的預設容量閾值;將達到所述預設容量閾值時讀取的各行數(shù)據(jù)發(fā)送至終端,同時重置所述用戶緩存區(qū);繼續(xù)讀取所述數(shù)據(jù)報文中未讀取完的數(shù)據(jù),并存放在重置后的用戶緩存區(qū)中。
[0012]第二方面,本申請?zhí)峁┝艘环N數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置,所述裝置包括:接收單元,配置用于接收數(shù)據(jù)報文,同時讀取所述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值;判斷單元,配置用于判斷所述長度值是否小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度;片段讀取單元,配置用于響應于所述長度值小于或者等于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀取;行讀取單元,配置用于響應于所述長度值大于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀取;發(fā)送單元,配置用于將讀取的數(shù)據(jù)存放在用戶緩存區(qū)中,當所述用戶緩存區(qū)中的數(shù)據(jù)達到預設容量閾值,將所述用戶緩存區(qū)中的數(shù)據(jù)發(fā)送給終端。
[0013]在一些實施例中,所述片段讀取單元包括:封裝子單元,配置用于根據(jù)所述最大報文段長度,將所述數(shù)據(jù)報文封裝成至少一個數(shù)據(jù)片段;拷貝子單元,配置用于將所述至少一個數(shù)據(jù)片段中的每一個數(shù)據(jù)片段通過數(shù)據(jù)拷貝的方式拷貝到用戶空間;解封裝子單元,配置用于在所述至少一個數(shù)據(jù)片段全部拷貝到所述用戶空間之后,對所述至少一個數(shù)據(jù)片段解封裝。
[0014]在一些實施例中,所述解封裝子單元包括:數(shù)據(jù)長度確定模塊,配置用于從拷貝到所述用戶空間的各個數(shù)據(jù)片段中按照拷貝時間從先到后的順序依次確定單個數(shù)據(jù)片段中各行的數(shù)據(jù)長度,其中,所述各行的數(shù)據(jù)長度是用于存放各行數(shù)據(jù)內(nèi)容長度值的定長數(shù)據(jù)長度加上各行的數(shù)據(jù)內(nèi)容長度;數(shù)據(jù)內(nèi)容確定模塊,配置用于根據(jù)所述各行的數(shù)據(jù)長度,確定各行的數(shù)據(jù)內(nèi)容。
[0015]在一些實施例中,所述數(shù)據(jù)長度確定模塊配置進一步用于:讀取所述定長數(shù)據(jù)長度;通過讀取所述定長數(shù)據(jù)長度,確定各行數(shù)據(jù)內(nèi)容的長度值;由所述各行數(shù)據(jù)內(nèi)容的長度值,確定所述各行數(shù)據(jù)內(nèi)容的長度。
[0016]在一些實施例中,所述拷貝子單元配置進一步用于:將所述數(shù)據(jù)片段通過直接存儲器訪問的方式從協(xié)議引擎拷貝到內(nèi)核空間下的套接字緩沖區(qū);將拷貝到套接字緩沖區(qū)中的數(shù)據(jù)片段拷貝到用戶空間下的所述用戶緩存區(qū)中。
[0017]在一些實施例中,所述行讀取單元配置進一步用于:按照行數(shù)從小到大的順序依次讀取所述數(shù)據(jù)報文的各行數(shù)據(jù)并存放在所述用戶空間的用戶緩存區(qū)中;根據(jù)讀取到的所述各行的數(shù)據(jù)長度,確定各行的數(shù)據(jù)內(nèi)容。
[0018]在一些實施例中,所述發(fā)送單元包括:累加子單元,配置用于將讀取的數(shù)據(jù)長度值進行累加,直到達到所述用戶緩存區(qū)的預設容量閾值;發(fā)送子單元,配置用于將達到所述預設容量閾值時讀取的各行數(shù)據(jù)發(fā)送至終端,同時重置所述用戶緩存區(qū);讀取子單元,配置用于繼續(xù)讀取所述數(shù)據(jù)報文中未讀取完的數(shù)據(jù),并存放在重置后的用戶緩存區(qū)中。
[0019]本申請?zhí)峁┑臄?shù)據(jù)報文的轉(zhuǎn)發(fā)方法和裝置,通過讀取數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值,與傳輸控制協(xié)議依次所能傳輸?shù)淖畲髨笪亩伍L度進行比較,當數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值小于或者等于傳輸控制協(xié)議所能傳輸?shù)淖畲髨笪拈L度時,對數(shù)據(jù)報文以分片段的形式讀?。划敂?shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值大于傳輸控制協(xié)議所能傳輸?shù)淖畲髨笪亩伍L度時,對數(shù)據(jù)報文以分行的形式讀取,最后將讀取的報文存放在用戶緩存區(qū)中,當用戶緩存區(qū)中的數(shù)據(jù)達到預設閾值時,將數(shù)據(jù)發(fā)送給終端,從而有效的利用了傳輸控制協(xié)議的資源,降低終端空閑等待的時間,實現(xiàn)了高效的對數(shù)據(jù)報文的轉(zhuǎn)發(fā)。
【附圖說明】
[0020]通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本申請的其它特征、目的和優(yōu)點將會變得更明顯:
[0021]圖1是本申請可以應用于其中的示例性系統(tǒng)架構圖;
[0022]圖2是根據(jù)本申請的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法的一個實施例的流程圖;
[0023]圖3a和圖3b是根據(jù)本申請的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法的應用場景的示意圖;
[0024]圖4是根據(jù)本申請的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法的又一個實施例的流程圖;
[0025]圖5是根據(jù)本申請的數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置的一個實施例的結(jié)構示意圖;
[0026]圖6是適于用來實現(xiàn)本申請實施例的終端設備或服務器的計算機系統(tǒng)的結(jié)構示意圖。
【具體實施方式】
[0027]下面結(jié)合附圖和實施例對本申請作進一步的詳細說明??梢岳斫獾氖牵颂幩枋龅木唧w實施例僅僅用于解釋相關發(fā)明,而非對該發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與有關發(fā)明相關的部分。
[0028]需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。下面將參考附圖并結(jié)合實施例來詳細說明本申請。
[0029]圖1示出了可以應用本申請的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法或數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置的實施例的示例性系統(tǒng)架構100。
[0030]如圖1所示,系統(tǒng)架構100可以包括終端設備101、102、103,網(wǎng)絡104和服務器105。網(wǎng)絡104用以在終端設備101、102、103和服務器105之間提供通信鏈路的介質(zhì)。網(wǎng)絡104可以包括各種連接類型,例如有線、無線通信鏈路或者光纖電纜等等。
[0031]服務器105可以通過網(wǎng)絡104與終端設備101、102、103交互,向終端設備101、102、
103發(fā)送數(shù)據(jù)報文信息等。終端設備101、102、103上可以安裝有各種可以接收并讀取數(shù)據(jù)報文的應用,例如網(wǎng)頁瀏覽器應用、搜索類應用、即時通信工具、郵箱客戶端、社交平臺軟件等。
[0032]終端設備101、102、103可以是支持接收數(shù)據(jù)報文的各種電子設備,包括但不限于智能手機、平板電腦、電子書閱讀器、MP3播放器(Moving Picture Experts Group Aud1Layer III,動態(tài)影像專家壓縮標準音頻層面3)、MP4(Moving Picture Experts GroupAud1 Layer IV,動態(tài)影像專家壓縮標準音頻層面4)播放器、膝上型便攜計算機和臺式計算機等等。
[0033]服務器105可以是能夠讀取并轉(zhuǎn)發(fā)各種數(shù)據(jù)報文的服務器,例如對終端設備101、102、103需要的數(shù)據(jù)報文進行讀取并發(fā)送的后臺服務器。后臺服務器可以對終端設備需要的數(shù)據(jù)報文獲取并進行處理后,將數(shù)據(jù)報文轉(zhuǎn)發(fā)給終端設備。
[0034]需要說明的是,本申請實施例所提供的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法一般由服務器105執(zhí)行,相應地,數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置一般設置于服務器105中。
[0035]應該理解,圖1中的終端設備、網(wǎng)絡和服務器的數(shù)目僅僅是示意性的。根據(jù)實現(xiàn)需要,可以具有任意數(shù)目的終端設備、網(wǎng)絡和服務器。
[0036]繼續(xù)參考圖2,示出了根據(jù)本申請的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法的一個實施例的流程200。所述的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法,包括以下步驟:
[0037]步驟201,接收數(shù)據(jù)報文,同時讀取所述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值。
[0038]在本實施例中,數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法運行于其上的電子設備(例如圖1所示的服務器)可以通過有線連接方式或者無線連接方式從存儲有待獲取的數(shù)據(jù)報文的數(shù)據(jù)庫中接收數(shù)據(jù)報文,在接收到待獲取的數(shù)據(jù)報文的同時,讀取上述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值。上述數(shù)據(jù)庫包括但不限于MYSQL數(shù)據(jù)庫、ORACLE數(shù)據(jù)庫、DB2數(shù)據(jù)庫。需要指出的是,上述無線連接方式可以包括但不限于3G/4G連接、WiFi連接、藍牙連接、WiMAX連接、Zigbee連接、UffB(ultra wideband)連接、以及其他現(xiàn)在已知或?qū)黹_發(fā)的無線連接方式。
[0039]通常,數(shù)據(jù)報文中每一行的數(shù)據(jù)由該行的數(shù)據(jù)內(nèi)容的長度與數(shù)據(jù)內(nèi)容組成,例如在MYSQL數(shù)據(jù)庫中,數(shù)據(jù)報文的每一行組成形式為data-length(數(shù)據(jù)內(nèi)容的長度)+data-context (數(shù)據(jù)內(nèi)容),其中數(shù)據(jù)內(nèi)容的長度值存放在data-1 ength中,data_length的長度值為固定值。當接收MYSQL數(shù)據(jù)庫中的報文時,首先讀取首行的data-1 ength的長度值,從而確定數(shù)據(jù)內(nèi)容的長度值,通過讀取數(shù)據(jù)內(nèi)容的長度值,確定數(shù)據(jù)內(nèi)容。
[0040]步驟202,判斷首行數(shù)據(jù)內(nèi)容的長度值是否小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度。
[0041]在本實施例中,基于步驟201中得到的首行數(shù)據(jù)內(nèi)容的長度值,上述電子設備(例如圖1所示的服務器)可以將上述首行數(shù)據(jù)內(nèi)容的長度值與傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度值進行比較,確定上述長度值是否小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度值。其中,傳輸控制協(xié)議(TCP,Transmiss1n Control Protocol)是一種面向數(shù)據(jù)傳輸?shù)?、基于字?jié)流的傳輸層通信協(xié)議。最大報文段長度(MSS ,MaximumSegment Size),是傳輸控制協(xié)議定義的一個選項,用于在傳輸控制協(xié)議建立連接時,收發(fā)雙方協(xié)商通信時每一個報文段所能承載的最大數(shù)據(jù)長度。
[0042]步驟203,響應于首行數(shù)據(jù)內(nèi)容的長度值小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀取。
[0043]在本實施例中,基于步驟202對上述長度值與傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度的大小做出的判斷,當上述長度值小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度時,說明將上述首行數(shù)據(jù)全部放在傳輸控制協(xié)議上進行傳輸時,傳輸控制協(xié)議還有空閑資源,還能多承載一些數(shù)據(jù)進行傳輸,此時對所要讀取的數(shù)據(jù)報文劃分成多個片段,每次讀取一個片段。
[0044]在本實施例的一些可選的實現(xiàn)方式中,對上述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀取可以根據(jù)上述最大報文段長度,將上述數(shù)據(jù)報文切分成至少一個與最大報文段長度等長的數(shù)據(jù)片段,并對該數(shù)據(jù)片段進行封裝;對數(shù)據(jù)片段封裝完畢后,將上述數(shù)據(jù)片段全部拷貝到用戶空間中,在該空間下預置獨立的存儲空間用來存放拷貝完畢的數(shù)據(jù)片段。其中用戶空間為Linux系統(tǒng)中的普通應用程序運行的空間,在該空間下,處理器控制著應用程序?qū)τ布闹苯釉L問權以及對內(nèi)存的非授權訪問權;當上述數(shù)據(jù)片段全部拷貝到用戶空間后,對上述數(shù)據(jù)片段進行解封裝。
[0045]在本實施例的一些可選的實現(xiàn)方式中,對上述數(shù)據(jù)片段進行解封裝的方式可以將拷貝到上述用戶空間中的各個數(shù)據(jù)片段,按照拷貝時間從先到后的順序,依次讀取單個數(shù)據(jù)片段中各行的數(shù)據(jù)長度。各行的數(shù)據(jù)長度至少包括兩部分,其中一部分為固定的長度值,用于存放各行數(shù)據(jù)內(nèi)容的長度值,另一部分的長度值可變,用于存放數(shù)據(jù)內(nèi)容。在讀取上述各行的數(shù)據(jù)長度時,可以首先讀取用于存放各行數(shù)據(jù)內(nèi)容長度值的定長數(shù)據(jù)長度,通過讀取該數(shù)據(jù)長度,確定各行的數(shù)據(jù)內(nèi)容的長度值,通過獲取各行的數(shù)據(jù)內(nèi)容的長度值,確定各行的數(shù)據(jù)內(nèi)容長度,同時讀取該長度的數(shù)據(jù),確定該行的數(shù)據(jù)內(nèi)容。
[0046]在本實施例的一些可選的實現(xiàn)方式中,服務器可以通過直接存儲器訪問,將上述至少一個數(shù)據(jù)片段中的每一個數(shù)據(jù)片段從協(xié)議引擎拷貝到內(nèi)核空間的套接字緩沖區(qū)中。其中,協(xié)議引擎(protocol engine)位于系統(tǒng)的直接存儲器訪問空間中,用來表征傳輸控制協(xié)議的引擎;套接字為源IP地址和目的IP地址以及源端口號和目的端口號的組合。套接字緩沖區(qū)位于內(nèi)核空間(kerne I space)下,內(nèi)核空間為Linux系統(tǒng)中的部分核心軟件運行的空間,在該空間下的軟件擁有訪問硬件設備的所有權。在中央處理器(CPU ,CentralProcessing Unit)的控制下,服務器可以將拷貝到內(nèi)核空間下套接字緩沖區(qū)的數(shù)據(jù)片段拷貝到用戶空間。由此,在用戶空間層面上,服務器將數(shù)據(jù)通過解封裝的形式拷貝到用戶空間下的用戶緩存區(qū)中,其中,用戶緩存區(qū)用來緩沖將要轉(zhuǎn)發(fā)的數(shù)據(jù)報文。
[0047]步驟204,響應于首行數(shù)據(jù)內(nèi)容的長度值大于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀取。
[0048]在本實施例中,基于步驟202對上述長度值與傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度的大小做出的判斷,當上述長度值大于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度時,上述傳輸控制協(xié)議無法一次將同一行的數(shù)據(jù)傳送完畢,需要分多次傳送,因此,服務器對上述數(shù)據(jù)報文中的數(shù)據(jù)以分行的形式讀取。
[0049]在本實施例的一些可選的實現(xiàn)方式中,服務器對上述數(shù)據(jù)報文中的數(shù)據(jù)以分行的形式讀取可以按照從前向后的順序依次讀取數(shù)據(jù)報文的各行數(shù)據(jù)長度,首先讀取首行的用于存放各行數(shù)據(jù)內(nèi)容長度值的定長數(shù)據(jù)長度,通過讀取該數(shù)據(jù)長度,獲取首行的數(shù)據(jù)內(nèi)容的長度值,通過上述數(shù)據(jù)內(nèi)容的長度值,讀取首行的數(shù)據(jù)內(nèi)容長度,由于首行的數(shù)據(jù)內(nèi)容的長度值大于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪拈L度,因此可以將首行的數(shù)據(jù)內(nèi)容的長度分多次讀取;讀取完首行的數(shù)據(jù)長度后,繼續(xù)讀取下一行的數(shù)據(jù)長度,直到將上述數(shù)據(jù)報文中的數(shù)據(jù)全部讀取完畢,將讀取到的數(shù)據(jù)存放在上述用戶空間下的存儲空間中,再從存儲空間拷貝到用戶緩存區(qū)中;在數(shù)據(jù)讀取的過程中,通過確定讀取到的各行的數(shù)據(jù)長度,確定各行的數(shù)據(jù)內(nèi)容。
[0050]步驟205,將讀取的數(shù)據(jù)存放在用戶緩存區(qū)中,當用戶緩存區(qū)中的數(shù)據(jù)超過預設容量閾值,將所述用戶緩存區(qū)中的數(shù)據(jù)發(fā)送給終端。
[0051]在本實施例中,服務器將步驟203中以分片段的形式讀取的數(shù)據(jù)或者步驟204中以分行的形式讀取的數(shù)據(jù)存放在用戶緩存區(qū)中;在用戶緩存區(qū)設置一定的容量閾值,當服務器讀取的數(shù)據(jù)長度大于該容量閾值時,將用戶緩存區(qū)緩存的數(shù)據(jù)發(fā)送給終端設備。
[0052]繼續(xù)參見圖3a和圖3b,圖3a和圖3b是根據(jù)本實施例的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法的應用場景的一個示意圖。終端設備發(fā)出獲取數(shù)據(jù)報文的指令后,數(shù)據(jù)庫節(jié)點首先從MYSQL數(shù)據(jù)庫中接收需要轉(zhuǎn)發(fā)的數(shù)據(jù)報文,同時讀取首行數(shù)據(jù)內(nèi)容的長度;在MYSQL數(shù)據(jù)庫中,傳輸控制協(xié)議所能傳輸?shù)淖畲髨笪拈L度為16Mb。在圖3a的應用場景中,當首行數(shù)據(jù)內(nèi)容的長度為13Mb時,由于13MM、于16Mb,因此對數(shù)據(jù)報文采用分片段的方式讀取;在圖3b的應用場景中,當首行數(shù)據(jù)內(nèi)容的長度為17Mb時,由于17Mb大于16Mb,因此對數(shù)據(jù)報文采用分行的形式讀取。將圖3a或者圖3b讀取的數(shù)據(jù)存入用戶空間下的用戶緩存區(qū),對用戶緩存區(qū)設定閾值為8Mb,當讀取后放入用戶緩存區(qū)的數(shù)據(jù)達到8Mb時,將已經(jīng)達到閾值的8Mb數(shù)據(jù)發(fā)送給終端。
[0053]本申請的上述實施例提供的方法通過將報文的讀取方式分為片段讀取和行讀取,合理利用傳輸控制協(xié)議的資源,同時對用戶緩存區(qū)設置數(shù)據(jù)閾值,可以快速的轉(zhuǎn)發(fā)數(shù)據(jù)報文,降低終端等待的時間。
[0054]進一步參考圖4,其示出了數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法的又一個實施例的流程400。該數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法的流程400,包括以下步驟:
[0055]步驟401,接收數(shù)據(jù)報文,同時讀取數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值。
[0056]在本實施例中,數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法運行于其上的電子設備(例如圖1所示的服務器)可以通過有線連接方式或者無線連接方式從存儲有待獲取的數(shù)據(jù)報文的數(shù)據(jù)庫中接收數(shù)據(jù)報文,在接收到待獲取的數(shù)據(jù)報文的同時,讀取上述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值。
[0057]步驟402,判斷首行數(shù)據(jù)內(nèi)容的長度值是否小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度。
[0058]在本實施例中,步驟402的具體處理可以參考圖2對應實施例中步驟202,這里不再贅述。
[0059]步驟403,響應于首行數(shù)據(jù)內(nèi)容的長度值小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀取。
[0060]在本實施例中,步驟403的具體處理可以參考圖2對應實施例中步驟203,這里不再贅述。
[0061]步驟404,響應于首行數(shù)據(jù)內(nèi)容的長度值大于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀取。
[0062]基于步驟402對上述長度值與傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度的大小做出的判斷,當上述長度值大于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度時,對上述數(shù)據(jù)報文中的數(shù)據(jù)以分行的形式讀取。在讀取的過程中,服務器可以分多次對數(shù)據(jù)報文中首行的數(shù)據(jù)進行讀取,同時按照讀取的行數(shù)從先到后的順序依次將讀取完的數(shù)據(jù)直接存放到用戶緩存區(qū),在向用戶緩存區(qū)存放的過程中,以行為單位進行存放。
[0063]步驟405,將讀取的數(shù)據(jù)長度值進行累加,直到達到用戶緩存區(qū)的預設容量閾值。
[0064]在本實施例中,當上述的數(shù)據(jù)讀取方式為分片段讀取時,服務器對于存儲在用戶空間的數(shù)據(jù)片段進行拆分,獲得原始的數(shù)據(jù)報文后,從拷貝到用戶空間的各個數(shù)據(jù)片段中按照拷貝時間從先到后的順序依次放入用戶緩存區(qū)中,同時對放入用戶緩存區(qū)的數(shù)據(jù)長度進行累加,直到達到用戶緩存區(qū)的預設容量閾值。作為示例,整個數(shù)據(jù)報文被切分成2個數(shù)據(jù)片段,每個數(shù)據(jù)片段包含3行數(shù)據(jù),服務器將首先拷貝到用戶空間的數(shù)據(jù)片段以行為單位讀取出來,同時存放到用戶緩存區(qū)中,假設用戶緩存區(qū)的預設閾值為9Mb,而讀取的3行數(shù)據(jù)的長度值為6Mb,此時用戶緩存區(qū)還有存儲空間,服務器對后拷貝到用戶空間的數(shù)據(jù)片段進行讀取,該數(shù)據(jù)片段中最小的一行數(shù)據(jù)長度值為2Mb,將此2Mb的數(shù)據(jù)放入用戶緩存區(qū),此時存儲在用戶緩存區(qū)中的數(shù)據(jù)大小為8Mb,由于沒有以行為單位的小于或等于IMb的數(shù)據(jù),因此上述8Mb達到預設容量閾值,而剩下的未能放入用戶緩存區(qū)的數(shù)據(jù)處于排隊等候狀態(tài)。
[0065]在本實施例中,當上述的數(shù)據(jù)讀取方式為以分行的形式讀取時,從首行開始,服務器按照行數(shù)從小到大的順序依次將讀取到數(shù)據(jù)存放在用戶緩存區(qū),直到數(shù)據(jù)緩存區(qū)達到預設的容量閾值,停止對數(shù)據(jù)的讀取。
[0066]步驟406,將達到預設容量閾值時讀取的各行數(shù)據(jù)發(fā)送至終端,同時重置用戶緩存區(qū)。
[0067]在本實施例中,終端設備發(fā)出獲取數(shù)據(jù)報文的指令后,一直處于空閑等待狀態(tài),直到接收到數(shù)據(jù)報文后,對數(shù)據(jù)進行處理;同時,終端設備在接受數(shù)據(jù)時,只能以行為單位對數(shù)據(jù)進行接收和處理?;谏鲜霾襟E405中存儲在用戶緩存區(qū)存儲的數(shù)據(jù),服務器將上述數(shù)據(jù)以行為單位發(fā)送給終端設備,將數(shù)據(jù)發(fā)送給終端設備以后,對上述用戶緩存區(qū)進行重置操作,使得用戶緩存區(qū)可以繼續(xù)存儲數(shù)據(jù)。
[0068]步驟407,繼續(xù)讀取數(shù)據(jù)報文中未讀取完的數(shù)據(jù),并存放在重置后的用戶緩存區(qū)中。
[0069]基于步驟406中對用戶緩存區(qū)進行重置后,對于以分片段的方式讀取的數(shù)據(jù),將步驟405中處于排隊等待狀態(tài)的數(shù)據(jù)放入用戶緩存區(qū)中,并將放入緩存區(qū)的數(shù)據(jù)發(fā)送給終端;對于以分行的方式讀取的數(shù)據(jù),繼續(xù)讀取未讀完的數(shù)據(jù),同時將讀取的數(shù)據(jù)存放在數(shù)據(jù)緩存區(qū),數(shù)據(jù)緩存區(qū)達到預設閾值,將數(shù)據(jù)發(fā)送給終端。以此種方式一直將數(shù)據(jù)報文中的數(shù)據(jù)讀取完畢。
[0070]從圖4中可以看出,與圖2對應的實施例相比,本實施例中的數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法的流程400突出了對用戶緩存區(qū)的數(shù)據(jù)進行累加,同時對已經(jīng)發(fā)出數(shù)據(jù)后的用戶緩存區(qū)進行重置的步驟。由此,本實施例描述的方案可以更加快速有效的對數(shù)據(jù)報文進行讀取和發(fā)送。
[0071]進一步參考圖5,作為對上述各圖所示方法的實現(xiàn),本申請?zhí)峁┝艘环N數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置的一個實施例,該裝置實施例與圖2所示的方法實施例相對應,該裝置具體可以應用于各種電子設備中。
[0072]如圖5所示,本實施例所述的數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置500包括:接收單元501、判斷單元502、片段讀取單元503、行讀取單元504和發(fā)送單元505。其中,接收單元501配置用于接收數(shù)據(jù)報文,同時讀取所述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值;判斷單元502配置用于判斷所述長度值是否小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度;片段讀取單元503配置用于響應于所述長度值小于或者等于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀取;行讀取單元504配置用于響應于所述長度值大于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀取;而發(fā)送單元505配置用于將讀取的數(shù)據(jù)存放在用戶緩存區(qū)中,當所述用戶緩存區(qū)中的數(shù)據(jù)達到預設容量閾值,將所述用戶緩存區(qū)中的數(shù)據(jù)發(fā)送給終端。
[0073]在本實施例中,數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置500的接收單元501可以通過有線連接方式或者無線連接方式從存儲有待獲取的數(shù)據(jù)報文的數(shù)據(jù)庫中接收數(shù)據(jù)報文,在接收到待獲取的數(shù)據(jù)報文的同時,讀取上述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值。
[0074]在本實施例中,基于接收單元501得到的數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值,上述判斷單元502可以將首行數(shù)據(jù)內(nèi)容的長度與傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度進行比較,判斷首行數(shù)據(jù)內(nèi)容的長度是否小于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度。
[0075]在本實施例中,基于判斷單元502對首行數(shù)據(jù)內(nèi)容的長度與傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度進行比較后作出的判斷,上述片段讀取單元503可以對長度值小于等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度做出響應,此時對所要讀取的數(shù)據(jù)報文劃分成多個片段,每次讀取一個片段。
[0076]在本實施例中,基于判斷單元502對首行數(shù)據(jù)內(nèi)容的長度與傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度進行比較后作出的判斷,上述行讀取單元504可以對長度值大于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度做出響應,此時對對所要讀取的數(shù)據(jù)報文以分行的形式讀取,當一行的數(shù)據(jù)一次沒有讀取完畢時,可分多次進行讀取。
[0077]在本實施例中,將片段讀取單元503中以分片段的形式讀取的數(shù)據(jù)或者行讀取單元504中以分行的形式讀取的數(shù)據(jù)存放到上述發(fā)送單元505的用戶緩存區(qū)中;在用戶緩存區(qū)設置一定的容量閾值,當讀取的數(shù)據(jù)長度大于該容量閾值時,將用戶緩存區(qū)緩存的數(shù)據(jù)發(fā)送給終端設備。
[0078]在本實施例的一些可選的實現(xiàn)方式中,上述數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置500的片段讀取單元503進一步包括封裝子單元(未示出),配置用于對上述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀取可以根據(jù)上述最大報文段長度,將上述數(shù)據(jù)報文切分成至少一個與最大報文段長度等長的數(shù)據(jù)片段,并對該數(shù)據(jù)片段進行封裝;拷貝子單元(未示出),配置用于對數(shù)據(jù)片段封裝完畢后,將上述數(shù)據(jù)片段全部拷貝到用戶空間中;解封裝子單元(未示出),配置用于當上述數(shù)據(jù)片段全部拷貝到用戶空間后,對上述數(shù)據(jù)片段進行解封裝。解封裝子單元進一步包括數(shù)據(jù)長度確定模塊(未示出),配置用于將數(shù)據(jù)片段全部拷貝到用戶空間之后,按照拷貝時間從先到后的順序依次確定每一個數(shù)據(jù)片段中,各行的數(shù)據(jù)長度,其中各行的數(shù)據(jù)長度是用于存放各行數(shù)據(jù)內(nèi)容長度值的定長數(shù)據(jù)長度加上各行的數(shù)據(jù)內(nèi)容長度;數(shù)據(jù)內(nèi)容確定模塊(未示出),配置用于根據(jù)數(shù)據(jù)長度確定模塊(未示出)確定的各行的數(shù)據(jù)長度值,確定各行的數(shù)據(jù)內(nèi)容;數(shù)據(jù)長度確定模塊(未示出)配置進一步用于首先確定上述定長數(shù)據(jù)長度,通過上述定長數(shù)據(jù)長度來確定數(shù)據(jù)內(nèi)容的長度值,通過數(shù)據(jù)內(nèi)容的長度值確定數(shù)據(jù)內(nèi)容的長度。拷貝子單元(未示出)配置進一步用于首先將上述數(shù)據(jù)片段通過直接存儲器訪問的方式從協(xié)議引擎拷貝到內(nèi)核空間下的套接字緩沖區(qū),然后將拷貝到套接字緩沖區(qū)中的數(shù)據(jù)片段拷貝到用戶空間下的用戶緩存區(qū)中。
[0079]在本實施例的一些可選的實現(xiàn)方式中,上述數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置500的行讀取單元504配置進一步用于
[0080]在本實施例的一些可選的實現(xiàn)方式中,上述數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置500的發(fā)送單元505,進一步包括累加子單元(未示出),配置用于針對讀取到的數(shù)據(jù)長度值,將其進行累加,直到達到在用戶緩存區(qū)中預先設定的數(shù)據(jù)容量閾值;發(fā)送子單元(未示出),配置用于將達到上述用戶緩存區(qū)中預設容量閾值時的數(shù)據(jù),以行為單位,將數(shù)據(jù)發(fā)送到終端,同時對用戶緩存區(qū)進行重置;讀取子單元(未示出),配置用于針對數(shù)據(jù)報文中未讀取完的數(shù)據(jù)繼續(xù)讀取,同時讀取后存放在重置后的用戶緩存區(qū)中。
[0081]下面參考圖6,其示出了適于用來實現(xiàn)本申請實施例的服務器的計算機系統(tǒng)600的結(jié)構示意圖。
[0082]如圖6所示,計算機系統(tǒng)600包括中央處理單元(CPU)601,其可以根據(jù)存儲在只讀存儲器(R0M)602中的程序或者從存儲部分608加載到隨機訪問存儲器(RAM)603中的程序而執(zhí)行各種適當?shù)膭幼骱吞幚?。在RAM 603中,還存儲有系統(tǒng)600操作所需的各種程序和數(shù)據(jù)。CPU 60KROM 602以及RAM 603通過總線604彼此相連。輸入/輸出(I/O)接口605也連接至總線 604。
[0083]以下部件連接至I/O接口605:包括鍵盤、鼠標等的輸入部分606 ;包括諸如陰極射線管(CRT)、液晶顯示器(LCD)等以及揚聲器等的輸出部分606;包括硬盤等的存儲部分608;以及包括諸如LAN卡、調(diào)制解調(diào)器等的網(wǎng)絡接口卡的通信部分609。通信部分609經(jīng)由諸如因特網(wǎng)的網(wǎng)絡執(zhí)行通信處理。驅(qū)動器610也根據(jù)需要連接至I/O接口 605??刹鹦督橘|(zhì)611,諸如磁盤、光盤、磁光盤、半導體存儲器等等,根據(jù)需要安裝在驅(qū)動器610上,以便于從其上讀出的計算機程序根據(jù)需要被安裝入存儲部分608。
[0084]特別地,根據(jù)本公開的實施例,上文參考流程圖描述的過程可以被實現(xiàn)為計算機軟件程序。例如,本公開的實施例包括一種計算機程序產(chǎn)品,其包括有形地包含在機器可讀介質(zhì)上的計算機程序,所述計算機程序包含用于執(zhí)行流程圖所示的方法的程序代碼。在這樣的實施例中,該計算機程序可以通過通信部分609從網(wǎng)絡上被下載和安裝,和/或從可拆卸介質(zhì)611被安裝。
[0085]附圖中的流程圖和框圖,圖示了按照本申請各種實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,所述模塊、程序段、或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應當注意,在有些作為替換的實現(xiàn)中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
[0086]描述于本申請實施例中所涉及到的單元可以通過軟件的方式實現(xiàn),也可以通過硬件的方式來實現(xiàn)。所描述的單元也可以設置在處理器中,例如,可以描述為:一種處理器包括接收單元、判斷單元、片段讀取單元、行讀取單元和發(fā)送單元。其中,這些單元的名稱在某種情況下并不構成對該單元本身的限定,例如,接收單元還可以被描述為“接收數(shù)據(jù)報文的單元”。
[0087]作為另一方面,本申請還提供了一種非易失性計算機存儲介質(zhì),該非易失性計算機存儲介質(zhì)可以是上述實施例中所述裝置中所包含的非易失性計算機存儲介質(zhì);也可以是單獨存在,未裝配入終端中的非易失性計算機存儲介質(zhì)。上述非易失性計算機存儲介質(zhì)存儲有一個或者多個程序,當上述一個或者多個程序被一個設備執(zhí)行時,使得上述設備:接收數(shù)據(jù)報文,同時讀取所述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值;判斷所述長度值是否小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度;響應于所述長度值小于或者等于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀取;響應于所述長度值大于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀取;將讀取的數(shù)據(jù)存放在用戶緩存區(qū)中,當所述用戶緩存區(qū)中的數(shù)據(jù)達到預設容量閾值,將所述用戶緩存區(qū)中的數(shù)據(jù)發(fā)送給終端。
[0088]以上描述僅為本申請的較佳實施例以及對所運用技術原理的說明。本領域技術人員應當理解,本申請中所涉及的發(fā)明范圍,并不限于上述技術特征的特定組合而成的技術方案,同時也應涵蓋在不脫離所述發(fā)明構思的情況下,由上述技術特征或其等同特征進行任意組合而形成的其它技術方案。例如上述特征與本申請中公開的(但不限于)具有類似功能的技術特征進行互相替換而形成的技術方案。
【主權項】
1.一種數(shù)據(jù)報文的轉(zhuǎn)發(fā)方法,其特征在于,所述方法包括: 接收數(shù)據(jù)報文,同時讀取所述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值; 判斷所述長度值是否小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度; 響應于所述長度值小于或者等于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀取; 響應于所述長度值大于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀??; 將讀取的數(shù)據(jù)存放在用戶緩存區(qū)中,當所述用戶緩存區(qū)中的數(shù)據(jù)達到預設容量閾值,將所述用戶緩存區(qū)中的數(shù)據(jù)發(fā)送給終端。2.根據(jù)權利要求1所述的方法,其特征在于,所述響應于所述長度值小于或者等于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀取,包括: 根據(jù)所述最大報文段長度,將所述數(shù)據(jù)報文封裝成至少一個數(shù)據(jù)片段; 將所述至少一個數(shù)據(jù)片段中的每一個數(shù)據(jù)片段通過數(shù)據(jù)拷貝的方式拷貝到用戶空間;在所述至少一個數(shù)據(jù)片段全部拷貝到所述用戶空間之后,對所述至少一個數(shù)據(jù)片段解封裝。3.根據(jù)權利要求2所述的方法,其特征在于,所述在所述至少一個數(shù)據(jù)片段全部拷貝到所述用戶空間之后,對所述至少一個數(shù)據(jù)片段解封裝,包括: 從拷貝到所述用戶空間的各個數(shù)據(jù)片段中按照拷貝時間從先到后的順序依次確定每一個數(shù)據(jù)片段中各行的數(shù)據(jù)長度,其中,所述各行的數(shù)據(jù)長度是用于存放各行數(shù)據(jù)內(nèi)容長度值的定長數(shù)據(jù)長度加上各行的數(shù)據(jù)內(nèi)容長度; 根據(jù)所述各行的數(shù)據(jù)長度,確定各行的數(shù)據(jù)內(nèi)容。4.根據(jù)權利要求3所述的方法,其特征在于,所述從拷貝到所述用戶空間的各個數(shù)據(jù)片段中按照拷貝時間從先到后的順序依次確定每一個數(shù)據(jù)片段中各行的數(shù)據(jù)長度,包括: 讀取所述定長數(shù)據(jù)長度; 通過讀取所述定長數(shù)據(jù)長度,確定各行數(shù)據(jù)內(nèi)容的長度值; 由所述各行數(shù)據(jù)內(nèi)容的長度值,確定所述各行數(shù)據(jù)內(nèi)容的長度。5.根據(jù)權利要求2所述的方法,其特征在于,所述將所述至少一個數(shù)據(jù)片段中的每一個數(shù)據(jù)片段通過數(shù)據(jù)拷貝的方式拷貝到用戶空間,包括: 將所述數(shù)據(jù)片段通過直接存儲器訪問的方式從協(xié)議引擎拷貝到內(nèi)核空間下的套接字緩沖區(qū); 將拷貝到套接字緩沖區(qū)中的數(shù)據(jù)片段拷貝到用戶空間下的所述用戶緩存區(qū)中。6.根據(jù)權利要求1所述的方法,其特征在于,所述響應于所述長度值大于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀取,包括: 按照行數(shù)從大到小的順序依次讀取所述數(shù)據(jù)報文的各行數(shù)據(jù)并存放在所述用戶空間的用戶緩存區(qū)中; 根據(jù)讀取到的所述各行的數(shù)據(jù)長度,確定各行的數(shù)據(jù)內(nèi)容。7.根據(jù)權利要求1所述的方法,其特征在于,所述將讀取的數(shù)據(jù)存放在用戶緩存區(qū)中,當所述用戶緩存區(qū)中的數(shù)據(jù)達到預設容量閾值,將所述用戶緩存區(qū)中的數(shù)據(jù)發(fā)送給終端,包括: 將讀取的所述數(shù)據(jù)報文的數(shù)據(jù)長度值進行累加,直到達到所述用戶緩存區(qū)的預設容量閾值; 將達到所述預設容量閾值時讀取的各行數(shù)據(jù)發(fā)送至終端,同時重置所述用戶緩存區(qū); 繼續(xù)讀取所述數(shù)據(jù)報文中未讀取完的數(shù)據(jù),并存放在重置后的用戶緩存區(qū)中。8.一種數(shù)據(jù)報文的轉(zhuǎn)發(fā)裝置,其特征在于,所述裝置包括: 接收單元,配置用于接收數(shù)據(jù)報文,同時讀取所述數(shù)據(jù)報文的首行數(shù)據(jù)內(nèi)容的長度值;判斷單元,配置用于判斷所述長度值是否小于或者等于傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度; 片段讀取單元,配置用于響應于所述長度值小于或者等于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分片段的形式讀??; 行讀取單元,配置用于響應于所述長度值大于所述傳輸控制協(xié)議一次所能傳輸?shù)淖畲髨笪亩伍L度,對所述數(shù)據(jù)報文的數(shù)據(jù)以分行的形式讀??; 發(fā)送單元,配置用于將讀取的數(shù)據(jù)存放在用戶緩存區(qū)中,當所述用戶緩存區(qū)中的數(shù)據(jù)達到預設容量閾值,將所述用戶緩存區(qū)中的數(shù)據(jù)發(fā)送給終端。9.根據(jù)權利要求8所述的裝置,其特征在于,所述片段讀取單元,包括: 封裝子單元,配置用于根據(jù)所述最大報文段長度,將所述數(shù)據(jù)報文封裝成至少一個數(shù)據(jù)片段; 拷貝子單元,配置用于將所述至少一個數(shù)據(jù)片段中的每一個數(shù)據(jù)片段通過數(shù)據(jù)拷貝的方式拷貝到用戶空間; 解封裝子單元,配置用于在所述至少一個數(shù)據(jù)片段全部拷貝到所述用戶空間之后,對所述至少一個數(shù)據(jù)片段解封裝。10.根據(jù)權利要求9所述的裝置,其特征在于,所述解封裝子單元,包括: 數(shù)據(jù)長度確定模塊,配置用于從拷貝到所述用戶空間的各個數(shù)據(jù)片段中按照拷貝時間從先到后的順序依次確定每一個數(shù)據(jù)片段中各行的數(shù)據(jù)長度,其中,所述各行的數(shù)據(jù)長度是用于存放各行數(shù)據(jù)內(nèi)容長度值的定長數(shù)據(jù)長度加上各行的數(shù)據(jù)內(nèi)容長度; 數(shù)據(jù)內(nèi)容確定模塊,配置用于根據(jù)所述各行的數(shù)據(jù)長度,確定各行的數(shù)據(jù)內(nèi)容。11.根據(jù)權利要求10所述的裝置,其特征在于,所述數(shù)據(jù)長度確定模塊配置進一步用于: 讀取所述定長數(shù)據(jù)長度; 通過讀取所述定長數(shù)據(jù)長度,讀取各行數(shù)據(jù)內(nèi)容的長度值; 由所述各行數(shù)據(jù)內(nèi)容的長度值,確定所述各行數(shù)據(jù)內(nèi)容的長度。12.根據(jù)權利要求11所述的裝置,其特征在于,所述拷貝子單元配置進一步用于: 將所述數(shù)據(jù)片段通過直接存儲器訪問的方式從協(xié)議引擎拷貝到內(nèi)核空間下的套接字緩沖區(qū); 將拷貝到套接字緩沖區(qū)中的數(shù)據(jù)片段拷貝到用戶空間下的所述用戶緩存區(qū)中。13.根據(jù)權利要求8所述的裝置,其特征在于,所述行讀取單元配置進一步用于: 按照行數(shù)從大到小的順序依次讀取所述數(shù)據(jù)報文的各行數(shù)據(jù)并存放在所述用戶空間的用戶緩存區(qū)中; 根據(jù)讀取到的所述各行的數(shù)據(jù)長度,確定各行的數(shù)據(jù)內(nèi)容。14.根據(jù)權利要求8所述的裝置,其特征在于,所述發(fā)送單元,包括: 累加子單元,配置用于將讀取的所述數(shù)據(jù)報文的數(shù)據(jù)長度值進行累加,直到達到所述用戶緩存區(qū)的預設容量閾值; 發(fā)送子單元,配置用于將達到所述預設容量閾值時讀取的各行數(shù)據(jù)發(fā)送至終端,同時重置所述用戶緩存區(qū); 讀取子單元,配置用于繼續(xù)讀取所述數(shù)據(jù)報文中未讀取完的數(shù)據(jù),并存放在重置后的用戶緩存區(qū)中。
【文檔編號】H04L12/861GK106067865SQ201610355130
【公開日】2016年11月2日
【申請日】2016年5月25日 公開號201610355130.6, CN 106067865 A, CN 106067865A, CN 201610355130, CN-A-106067865, CN106067865 A, CN106067865A, CN201610355130, CN201610355130.6
【發(fā)明人】王天宇
【申請人】北京百度網(wǎng)訊科技有限公司