專利名稱:一種在網(wǎng)絡(luò)中傳輸規(guī)范數(shù)據(jù)的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信技術(shù)領(lǐng)域,更具體地說,涉及一種在網(wǎng)絡(luò)中傳輸規(guī)范數(shù)據(jù)的方法及系統(tǒng)。
背景技術(shù):
在企業(yè)應用開發(fā)任務中,在服務器、服務器和客戶端之間的網(wǎng)絡(luò)環(huán)境中,傳遞規(guī)范的業(yè)務數(shù)據(jù),是一項非常重要而艱巨的任務,常常占據(jù)了應用開發(fā)任務的大部分開發(fā)時間?,F(xiàn)有企業(yè)應用開發(fā)中,基于網(wǎng)絡(luò)或互聯(lián)網(wǎng)傳遞數(shù)據(jù)最常用的是“簡單對象訪問協(xié)議”,英文縮寫為SOBP (Simple OAjeBt BBBess ProtoBoD0簡單對象訪問協(xié)議(SOBP)是一種輕量的、簡單的、基于XML的協(xié)議,它被設(shè)計成在網(wǎng)絡(luò)或互聯(lián)網(wǎng)上交換結(jié)構(gòu)化的和固化的信息。簡單對象訪問協(xié)議(SOBP)包括四個部分:S0BP封裝、SOBP編碼規(guī)則、SOBP RPB表示和SOBP綁定。SOBP封裝:它定義了一個框架,該框架描述了消息中的內(nèi)容是什么,誰應當處理它以及它是可選的還是必須的;S0BP編碼規(guī)則:它定義了一種序列化的機制,用于交換應用程序所定義的數(shù)據(jù)類型的實例;S0BP RPB表示:它定義了用于表示遠程過程調(diào)用和應答的協(xié)定;S0BP綁定:定義了一種使用底層傳輸協(xié)議來完成在節(jié)點間交換SOBP封裝的約定。SOBP的主要缺點如下:1、復雜度高。SOBP包括四個部分,而且每個部分都依賴于其他部分,耦合度低。數(shù)據(jù)解析算法復雜;2、數(shù)據(jù)開銷大且安全性低。因為SOBP是基于XML協(xié)議封裝的,XML是基于文本解析的一種協(xié)議,使用文本對數(shù)據(jù)進行封裝會導致數(shù)據(jù)開銷大而且導致系統(tǒng)安全性極低。如果采用XML壓縮和加密,又會加大數(shù)據(jù)處理的時間;3、只關(guān)心內(nèi)存數(shù)據(jù)封裝,沒有關(guān)注文件數(shù)據(jù)的封裝。所有的SOBP XML解析都在內(nèi)存中進行,會導致內(nèi)存占用過大,在多連接、多客戶端的網(wǎng)絡(luò)環(huán)境及其不利,并且SOBP沒有涉及到文件數(shù)據(jù)的存取和訪問,而且文件數(shù)據(jù)如果經(jīng)過XML解析處理后會比原始數(shù)據(jù)長度更大,加大網(wǎng)絡(luò)傳輸量;4、S0BP只關(guān)注對象的自編碼和封裝,對業(yè)務邏輯處理關(guān)注不夠。企業(yè)應用開發(fā)中非常多的關(guān)注于業(yè)務邏輯處理:調(diào)用業(yè)務邏輯處理模塊和功能、業(yè)務邏輯處理正常返回的數(shù)據(jù)以及業(yè)務邏輯處理異常通知及異常數(shù)據(jù)等,SOBP對業(yè)務邏輯關(guān)注不夠,導致企業(yè)應用開發(fā)要在SOBP上再次封裝業(yè)務邏輯協(xié)議,增加開發(fā)難度。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的數(shù)據(jù)傳遞中采用SOBP的缺陷,提供一種降低開發(fā)復雜度,快速實現(xiàn)業(yè)務邏輯開發(fā),以通信包的方式傳送數(shù)據(jù),可以傳送內(nèi)存、文件等數(shù)據(jù)、降低網(wǎng)絡(luò)傳輸流量、提高網(wǎng)絡(luò)安全的在網(wǎng)絡(luò)中傳輸規(guī)范數(shù)據(jù)的方法及系統(tǒng)。本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:構(gòu)造一種在網(wǎng)絡(luò)中傳輸規(guī)范數(shù)據(jù)的方法,包括以下步驟:A、發(fā)送裝置從待發(fā)送的通信包隊列中取出所述待發(fā)送通信包,生成發(fā)送數(shù)據(jù),并將該發(fā)送數(shù)據(jù)發(fā)送出去;所述發(fā)送數(shù)據(jù)是通信包,所述發(fā)送數(shù)據(jù)由包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的一個或多個組成;B、接收裝置接收所述發(fā)送裝置發(fā)送過來的發(fā)送數(shù)據(jù),如果接收數(shù)據(jù)不為空,則根據(jù)所述接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),生成接收通信包。在本發(fā)明所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中,所述步驟A具體包括以下步驟:Al、所述發(fā)送裝置的通信包隊列引擎模塊從所述待發(fā)送通信包隊列中取出所述待發(fā)送通信包;A2、所述發(fā)送裝置的通信包讀取引擎模塊讀取所述待發(fā)送通信包的內(nèi)容,生成所述發(fā)送數(shù)據(jù),傳遞給所述發(fā)送裝置的網(wǎng)絡(luò)發(fā)送引擎模塊;A3、所述發(fā)送裝置的網(wǎng)絡(luò)發(fā)送引擎模塊將所述發(fā)送數(shù)據(jù)發(fā)送出去;A4、所述發(fā)送裝置的發(fā)送事件調(diào)度引擎模塊判斷是否發(fā)送完成,完成則通知上層發(fā)送數(shù)據(jù)完成。在本發(fā)明所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中,所述步驟A2具體包括以下步驟:A21、所述通信包讀取引擎模塊根據(jù)當前第一讀取位置判斷是否需要讀取所述待發(fā)送通信包的包頭,如果是,則執(zhí)行步驟A22,否則執(zhí)行步驟A23 ;A22:讀待所述發(fā)送通信包的包頭數(shù)據(jù);所述網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)所述待發(fā)送通信包和包頭位置,獲取所述待發(fā)送通信包中要發(fā)送的包頭字節(jié)數(shù)組,并更新待所述發(fā)送通信包的讀取位置為第二讀取位置;然后執(zhí)行步驟A23 ;A23:所述通信包讀取引擎模塊根據(jù)所述第二讀取位置判斷是否需要讀取所述待發(fā)送通信包的保留區(qū),如果是,則執(zhí)行步驟A24,否則執(zhí)行步驟A25 ;A24:讀所述待發(fā)送通信包的保留區(qū)數(shù)據(jù);所述網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)所述待發(fā)送通信包和保留區(qū)位置,獲取所述待發(fā)送通信包中要發(fā)送的保留區(qū)字節(jié)數(shù)組,并更新所述待發(fā)送通信包的讀取位置為第三讀取位置,然后執(zhí)行步驟A25 ;A25、所述通信包讀取引擎模塊根據(jù)所述第三讀取位置判斷是否需要讀取所述待發(fā)送通信包的內(nèi)存區(qū),如果是,則執(zhí)行步驟A26,否則執(zhí)行步驟A27 ;A26、讀所述待發(fā)送通信包的發(fā)內(nèi)存區(qū)數(shù)據(jù);所述網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)所述待發(fā)送通信包和內(nèi)存區(qū)位置,獲取所述待發(fā)送通信包中要發(fā)送的內(nèi)存區(qū)字節(jié)數(shù)組,并更新所述待發(fā)送通信包的讀取位置為第四讀取位置,然后執(zhí)行步驟A27 ;A27、所述通信包讀取引擎模塊根據(jù)所述第四讀取位置判斷是否需要讀取所述待發(fā)送通信包的文件區(qū),如果是,則執(zhí)行步驟A28,否則執(zhí)行步驟A29 ;A28、讀所述待發(fā)送通信包的發(fā)文件區(qū)數(shù)據(jù);所述網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)所述待發(fā)送通信包和文件區(qū)位置,獲取所述待發(fā)送通信包中要發(fā)送的文件區(qū)字節(jié)數(shù)組,根據(jù)獲取的待發(fā)送通信包中要發(fā)送的包頭字節(jié)數(shù)組、保留區(qū)字節(jié)數(shù)據(jù)、內(nèi)存區(qū)字節(jié)數(shù)組、文件區(qū)字節(jié)數(shù)組生成發(fā)送數(shù)據(jù),然后執(zhí)行步驟A29 ;A29、所述通信包讀取引擎模塊根據(jù)所述生成的發(fā)送數(shù)據(jù)的源長度和待發(fā)送通信包的包頭中的源長度是否相等,如果是,則判斷所述待發(fā)送通信包已經(jīng)讀完成。在本發(fā)明所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中,所述步驟B具體包括以下步驟:B1、所述接收裝置的網(wǎng)絡(luò)接收引擎模塊從所述發(fā)送裝置獲取所述接收數(shù)據(jù),如果所接收的數(shù)據(jù)不為空,則執(zhí)行步驟B2 ;B2、所述接收裝置的通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),如需要寫,則執(zhí)行寫通信包操作,生成所述接收通信包;寫通信包完成后,執(zhí)行步驟B3 ;B3、所述接收裝置的通信包寫入引擎模塊判斷所述接收數(shù)據(jù)是否全部寫完,如果否,則執(zhí)行步驟B2,如果是,則執(zhí)行步驟B4 ;B4、所述接收裝置的接收事件調(diào)度引擎模塊異步通知上層已從網(wǎng)絡(luò)中接收到通信包,然后繼續(xù)執(zhí)行步驟BI。在本發(fā)明所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中,所述步驟B2具體包括以下步驟:B21、所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當前寫通信包的位置是否處于包頭區(qū)域,如果是,則執(zhí)行步驟B22,否則執(zhí)行步驟B23 ;B22、所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和包頭緩存數(shù)據(jù)進行整合,當整合數(shù)據(jù)長度等于包頭的長度時,則寫入通信包包頭中;然后執(zhí)行步驟B23 ;B23、所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當前寫通信包的位置是否處于保留區(qū)區(qū)域,如果是,則執(zhí)行步驟B24,否則執(zhí)行步驟B25 ;B24、所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和保留區(qū)緩存數(shù)據(jù)進行整合,當整合數(shù)據(jù)長度等于保留區(qū)長度是,則寫入通信包保留區(qū)中;然后執(zhí)行步驟B25 ;B25:所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當前寫通信包的位置是否處于內(nèi)存區(qū)區(qū)域,如果是,則執(zhí)行步驟B26,否則執(zhí)行步驟B27 ;B26:所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和內(nèi)存區(qū)緩存數(shù)據(jù)進行整合,當整合數(shù)據(jù)長度等于內(nèi)存區(qū)數(shù)據(jù)長度時,則寫入通信包內(nèi)存區(qū)中,然后執(zhí)行步驟B27 ;B27、所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當前寫通信包的位置是否處于文件頭信息和分塊信息的區(qū)域,如果是,則執(zhí)行步驟B28,否則執(zhí)行步驟B29 ;B28、所述通信包寫入引擎模塊根據(jù)當前所在文件區(qū)域的位置,在通信包中寫入完整的文件頭信息或分塊信息;根據(jù)寫入通信包包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的數(shù)據(jù)生成所述接收通信包,然后執(zhí)行步驟B29 ;B29、所述通信包寫入引擎模塊判斷當前生成的接收通信包的源長度和所述接收數(shù)據(jù)的包頭中的源長度是否相等,如果是,則認為當前通信包寫完成。在本發(fā)明所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中,所述包頭用于描述通信包的組成結(jié)構(gòu)和業(yè)務邏輯信息。本發(fā)明還構(gòu)造一種在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的系統(tǒng),包括:發(fā)送裝置,用于從待發(fā)送的通信包隊列中取出待發(fā)送通信包,生成發(fā)送數(shù)據(jù),并將所述發(fā)送數(shù)據(jù)發(fā)送出去;所述發(fā)送數(shù)據(jù)是通信包,所述發(fā)送數(shù)據(jù)由包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的一個或多個組成;接收裝置,與所述發(fā)送裝置連接,用于接收所述發(fā)送裝置發(fā)送過來的發(fā)送數(shù)據(jù),如果接收數(shù)據(jù)不為空,則根據(jù)所述接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),生成接收通信包。在本發(fā)明所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的系統(tǒng)中,所述發(fā)送裝置包括:通信包隊列引擎模塊,用于從所述待發(fā)送通信包隊列中取出所述待發(fā)送通信包;通信包讀取引擎模塊與所述通信包隊列引擎模塊連接,用于讀取所述待發(fā)送通信包的內(nèi)容,生成所述發(fā)送數(shù)據(jù),傳遞給網(wǎng)絡(luò)發(fā)送引擎模塊;網(wǎng)絡(luò)發(fā)送引擎模塊與所述通信包讀取引擎模塊連接,用于將所述發(fā)送數(shù)據(jù)發(fā)送出去;發(fā)送事件調(diào)度引擎模塊與所述網(wǎng)絡(luò)發(fā)送引擎模塊連接,用于判斷是否發(fā)送完成,完成則通知上層發(fā)送數(shù)據(jù)完成。在本發(fā)明所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的系統(tǒng)中,所述接收裝置包括:網(wǎng)絡(luò)接收引擎模塊,用于從所述發(fā)送裝置獲取所述接收數(shù)據(jù);通信包寫入引擎模塊,與所述網(wǎng)絡(luò)接收引擎模塊連接,用于根據(jù)所述接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),如需要寫,則執(zhí)行寫通信包操作,生成所述接收通信包;接收事件調(diào)度引擎模塊,與所述通信包寫入引擎模塊連接,用于在寫通信包完成后,根據(jù)生成的所述接收通信包,異步通知上層已從網(wǎng)絡(luò)中接收到通信包;所述通信包寫入引擎模塊還用于判斷所述接收數(shù)據(jù)是否全部寫完,如果否,則繼續(xù)執(zhí)行寫操作。在本發(fā)明所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的裝置中,所述包頭用于描述通信包的組成結(jié)構(gòu)和業(yè)務邏輯信息。實施本發(fā)明的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法及裝置中,具有以下有益效果:發(fā)送裝置將待發(fā)送通信包生成發(fā)送數(shù)據(jù),該發(fā)送數(shù)據(jù)是通信包,包括包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的一個或多個,該發(fā)送數(shù)據(jù)是一個規(guī)范數(shù)據(jù);接收裝置接收發(fā)送裝置發(fā)送過來的發(fā)送數(shù)據(jù),并將接收數(shù)據(jù)生成接收通信包;在發(fā)送裝置和接收裝置中以通信包的形式傳遞數(shù)據(jù),可以傳送內(nèi)存、文件等數(shù)據(jù),規(guī)范化傳輸數(shù)據(jù),可降低網(wǎng)絡(luò)傳輸流量、降低數(shù)據(jù)通信開發(fā)的復雜度、提高網(wǎng)絡(luò)安全。
下面將結(jié)合附圖及實施例對本發(fā)明作進一步說明,附圖中:圖1是本發(fā)明的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法的流程圖;圖2是本發(fā)明的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中步驟A的具體流程圖;圖3是本發(fā)明的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中步驟A2的的具體流程圖;圖4是本發(fā)明的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中步驟B的具體流程圖;圖5是本發(fā)明的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中步驟B2的具體流程圖;圖6是本發(fā)明的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的系統(tǒng)的結(jié)構(gòu)框圖。
具體實施例方式為了使本發(fā)明的目的更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。如圖1所示,在本發(fā)明的本發(fā)明的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法的流程圖中,包括以下步驟:A、發(fā)送裝置從待發(fā)送的通信包隊列中取出待發(fā)送通信包,生成發(fā)送數(shù)據(jù),并將該發(fā)送數(shù)據(jù)發(fā)送出去;該發(fā)送數(shù)據(jù)是通信包,該發(fā)送數(shù)據(jù)由包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的一個或多個組成;在該步驟中,該待發(fā)送的通信包隊列的形成類似代辦任務隊列,發(fā)送裝置調(diào)用隊列引擎的發(fā)送通信包接口后,隊列引擎將待發(fā)送通信包添加入“待發(fā)送通信包隊列”中;B、接收裝置接收所述發(fā)送裝置發(fā)送過來的發(fā)送數(shù)據(jù),如果接收數(shù)據(jù)不為空,則根據(jù)接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),生成接收通信包。進一步的,步驟A具體包括以下步驟(如圖2所示):Al、該發(fā)送裝置的通信包隊列引擎模塊從待發(fā)送通信包隊列中取出待發(fā)送通信包;A2、該發(fā)送裝置的通信包讀取引擎模塊讀取待發(fā)送通信包的內(nèi)容,生成發(fā)送數(shù)據(jù),傳遞給發(fā)送裝置的網(wǎng)絡(luò)發(fā)送引擎模塊;A3、該發(fā)送裝置的網(wǎng)絡(luò)發(fā)送引擎模塊將發(fā)送數(shù)據(jù)發(fā)送出去;A4、該發(fā)送裝置的發(fā)送事件調(diào)度引擎模塊判斷是否發(fā)送完成,完成則通知上層發(fā)送數(shù)據(jù)完成。該上層可以理解為調(diào)用者,或者是業(yè)務邏輯系統(tǒng),或者是服務器對象等;可以這樣理解:使用這個發(fā)送數(shù)據(jù)的對象,因為它是位于相對這個網(wǎng)絡(luò)發(fā)送引擎模塊之上的。進一步的,步驟A2具體包括以下步驟(如圖3所示):A21、通信包讀取引擎模塊根據(jù)當前第一讀取位置判斷是否需要讀取待發(fā)送通信包的包頭,如果是,則執(zhí)行步驟A22,否則執(zhí)行步驟A23 ;A22:讀待發(fā)送通信包的包頭數(shù)據(jù);網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)待發(fā)送通信包和包頭位置,獲取待發(fā)送通信包中要發(fā)送的包頭字節(jié)數(shù)組,并更新待發(fā)送通信包的讀取位置為第二讀取位置;然后執(zhí)行步驟A23 ;A23:通信包讀取引擎模塊根據(jù)第二讀取位置判斷是否需要讀取待發(fā)送通信包的保留區(qū),如果是,則執(zhí)行步驟A24,否則執(zhí)行步驟A25 ;A24:讀待發(fā)送通信包的保留區(qū)數(shù)據(jù);網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)待發(fā)送通信包和保留區(qū)位置,獲取該待發(fā)送通信包中要發(fā)送的保留區(qū)字節(jié)數(shù)組,并更新待發(fā)送通信包的讀取位置為第三讀取位置,然后執(zhí)行步驟A25 ;A25、通信包讀取引擎模塊根據(jù)第三讀取位置判斷是否需要讀取待發(fā)送通信包的內(nèi)存區(qū),如果是,則執(zhí)行步驟A26,否則執(zhí)行步驟A27 ;A26、讀待發(fā)送通信包的發(fā)內(nèi)存區(qū)數(shù)據(jù);網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)待發(fā)送通信包和內(nèi)存區(qū)位置,獲取該待發(fā)送通信包中要發(fā)送的內(nèi)存區(qū)字節(jié)數(shù)組,并更新待發(fā)送通信包的讀取位置為第四讀取位置,然后執(zhí)行步驟A27 ;A27、通信包讀取引擎模塊根據(jù)第四讀取位置(讀取位置分別包括四個位置:即包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū))判斷是否需要讀取待發(fā)送通信包的文件區(qū),如果是,則執(zhí)行步驟A28,否則執(zhí)行步驟A29 ;A28、讀待發(fā)送通信包的發(fā)文件區(qū)數(shù)據(jù);網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)待發(fā)送通信包和文件區(qū)位置,獲取該待發(fā)送通信包中要發(fā)送的文件區(qū)字節(jié)數(shù)組,根據(jù)獲取的待發(fā)送通信包中要發(fā)送的包頭字節(jié)數(shù)組、保留區(qū)字節(jié)數(shù)據(jù)、內(nèi)存區(qū)字節(jié)數(shù)組、文件區(qū)字節(jié)數(shù)組生成發(fā)送數(shù)據(jù),然后執(zhí)行步驟A29 ;該發(fā)送數(shù)據(jù)是采用通信包的形式。A29、通信包讀取引擎模塊根據(jù)當前生成的發(fā)送數(shù)據(jù)的源長度和待發(fā)送通信包的包頭中的源長度是否相等,如果是,則判斷待發(fā)送通信包已經(jīng)讀完成。該待發(fā)送通信包的包頭中的源長度即為表二中的第11項數(shù)值。進一步的,步驟B具體包括以下步驟(如圖4所示):B1、該接收裝置的網(wǎng)絡(luò)接收引擎模塊從發(fā)送裝置獲取接收數(shù)據(jù),如果接收數(shù)據(jù)不為空,則執(zhí)行步驟B2 ;該發(fā)送裝置可以是服務器、客戶端、移動端等通信終端,各通信終端之間以通信包進行數(shù)據(jù)傳輸;通信包表達一組完整的業(yè)務邏輯的二進制數(shù)據(jù)集合,這樣劃分也便于發(fā)送裝置進行分包處理,避免二進制數(shù)據(jù)“粘”在一起;B2、該接收裝置的通信包寫入引擎模塊根據(jù)接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),如需要寫,則執(zhí)行寫通信包操作,生成接收通信包;寫通信包完成后,執(zhí)彳了步驟B3 ;B3、該接收裝置的通信包寫入引擎模塊判斷接收數(shù)據(jù)是否全部寫完,如果否,則執(zhí)行步驟B2,如果是,則執(zhí)行步驟B4 ;B4、接收事件調(diào)度引擎模塊異步通知上層已從網(wǎng)絡(luò)中接收到通信包,然后繼續(xù)執(zhí)行步驟BI。該上層可以理解為調(diào)用者,或者是業(yè)務邏輯系統(tǒng),或者是服務器對象等;可以這樣理解:使用這個接收數(shù)據(jù)的對象,因為它是位于相對這個通信包寫入引擎模塊之上的。在該步驟中,接收事件調(diào)度引擎模塊異步通知上層已從網(wǎng)絡(luò)中接收到通信包,該異步通知可以使用后臺線程、異步I/O 口等方法實現(xiàn)。進一步的,步驟B2具體包括以下步驟(如圖5所示):B21、通信包寫入引擎模塊根據(jù)接收數(shù)據(jù)判斷當前寫通信包的位置是否處于包頭區(qū)域,如果是,則執(zhí)行步驟B12,否則執(zhí)行步驟B13 ;B22、通信包寫入引擎模塊將接收數(shù)據(jù)和包頭緩存數(shù)據(jù)進行整合,當整合數(shù)據(jù)長度等于包頭的長度時,則寫入通信包包頭中;當整合數(shù)據(jù)長度小于包頭的長度時,則繼續(xù)將接收數(shù)據(jù)堆加在包頭緩存數(shù)據(jù)中,然后執(zhí)行步驟B23 ;在步驟B21中的包頭緩存數(shù)據(jù)是一塊臨時數(shù)據(jù),按包頭的大小分配在系統(tǒng)內(nèi)存中;當整合完成后,即緩存數(shù)據(jù)一旦完整寫完后,則將整合后的數(shù)據(jù)寫入通信包包頭中;B23、通信包寫入引擎模塊根據(jù)接收數(shù)據(jù)判斷當前寫通信包的位置是否處于保留區(qū)區(qū)域,如果是,則執(zhí)行步驟B24,否則執(zhí)行步驟B25 ;B24、通信包寫入引擎模塊將接收數(shù)據(jù)和保留區(qū)緩存數(shù)據(jù)進行整合,當整合數(shù)據(jù)長度等于保留區(qū)長度是,則寫入通信包保留區(qū)中;當整合數(shù)據(jù)長度小于保留區(qū)長度時,則繼續(xù)接收數(shù)據(jù)堆加在保留區(qū)緩存數(shù)據(jù)中然后執(zhí)行步驟B25 ;B25:通信包寫入引擎模塊根據(jù)接收數(shù)據(jù)判斷當前寫通信包的位置是否處于內(nèi)存區(qū)區(qū)域,如果是,則執(zhí)行步驟B26,否則執(zhí)行步驟B27 ;B26:通信包寫入引擎模塊將接收數(shù)據(jù)和內(nèi)存區(qū)緩存數(shù)據(jù)進行整合,當整合數(shù)據(jù)長度等于內(nèi)存區(qū)數(shù)據(jù)長度時,則寫入通信包內(nèi)存區(qū)中,然后執(zhí)行步驟B27 ;B27、通信包寫入引擎模塊根據(jù)接收數(shù)據(jù)判斷當前寫通信包的位置是否處于文件頭信息和分塊信息的區(qū)域,如果是,則執(zhí)行步驟B28,否則執(zhí)行步驟B29 ;B28、通信包寫入引擎模塊根據(jù)當前所在文件區(qū)域的位置,在通信包中寫入完整的文件頭信息或分塊信息;根據(jù)寫入通信包包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的數(shù)據(jù)生成該接收通信包,然后執(zhí)行步驟B29 ;在該步驟B28中,需要首先判斷是寫入文件頭信息還是寫入分塊信息;B29、通信包寫入引擎模塊判斷當前生成的接收通信包的源長度和該接收數(shù)據(jù)的包頭中的源長度是否相等,如果是,則認為當前通信包寫完成。該接收數(shù)據(jù)的包頭中的源長度即為表二中第11項的數(shù)值。在上述生成接收通信包中的過程中,包頭區(qū)、保留區(qū)和內(nèi)存區(qū)都存在緩存數(shù)據(jù),緩存數(shù)據(jù)都是首先按各自區(qū)的大小進行分配,記錄寫入的索引位置,用于判斷是否完整寫完。在本發(fā)明的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中,該待發(fā)送的通信包、生成的發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、生成的接收通信包都是采用通信包的格式,該通信包由包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的一個或多個組成;該包頭用于描述通信包的組成結(jié)構(gòu)和業(yè)務邏輯信息;該通信包表達一組完整的業(yè)務邏輯的二進制數(shù)據(jù)集合,便于各發(fā)送裝置進行分包處理,避免二進制數(shù)據(jù)“粘”在一起。通信包的具體結(jié)構(gòu)如表一所示:表一
權(quán)利要求
1.一種在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法,其特征在于,包括以下步驟: A、發(fā)送裝置從待發(fā)送的通信包隊列中取出所述待發(fā)送通信包,生成發(fā)送數(shù)據(jù),并將該發(fā)送數(shù)據(jù)發(fā)送出去;所述發(fā)送數(shù)據(jù)是通信包,所述發(fā)送數(shù)據(jù)由包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的一個或多個組成; B、接收裝置接收所述發(fā)送裝置發(fā)送過來的發(fā)送數(shù)據(jù),如果接收數(shù)據(jù)不為空,則根據(jù)所述接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),生成接收通信包。
2.根據(jù)權(quán)利 要求1所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法,其特征在于,所述步驟A具體包括以下步驟: Al、所述發(fā)送裝置的通信包隊列引擎模塊從所述待發(fā)送通信包隊列中取出所述待發(fā)送通信包; A2、所述發(fā)送裝置的通信包讀取引擎模塊讀取所述待發(fā)送通信包的內(nèi)容,生成所述發(fā)送數(shù)據(jù),傳遞給所述發(fā)送裝置的網(wǎng)絡(luò)發(fā)送引擎模塊; A3、所述發(fā)送裝置的網(wǎng)絡(luò)發(fā)送引擎模塊將所述發(fā)送數(shù)據(jù)發(fā)送出去, A4、所述發(fā)送裝置的發(fā)送事件調(diào)度引擎模塊判斷是否發(fā)送完成,完成則通知上層所述發(fā)送數(shù)據(jù)發(fā)送完成。
3.根據(jù)權(quán)利要求2所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法,其特征在于,所述步驟A2具體包括以下步驟: A21、所述通信包讀取引擎模塊根據(jù)當前第一讀取位置判斷是否需要讀取所述待發(fā)送通信包的包頭,如果是,則執(zhí)行步驟A22,否則執(zhí)行步驟A23 ; A22:讀所述待發(fā)送通信包的包頭數(shù)據(jù);所述網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)所述待發(fā)送通信包和包頭位置,獲取所述待發(fā)送通信包中要發(fā)送的包頭字節(jié)數(shù)組,并更新所述待發(fā)送通信包的讀取位置為第二讀取位置;然后執(zhí)行步驟A23 ; A23:所述通信包讀取引擎模塊根據(jù)所述第二讀取位置判斷是否需要讀取所述待發(fā)送通信包的保留區(qū),如果是,則執(zhí)行步驟A24,否則執(zhí)行步驟A25 ; A24:讀所述待發(fā)送通信包的保留區(qū)數(shù)據(jù);所述網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)所述待發(fā)送通信包和保留區(qū)位置,獲取所述待發(fā)送通信包中要發(fā)送的保留區(qū)字節(jié)數(shù)組,并更新所述待發(fā)送通信包的讀取位置為第三讀取位置,然后執(zhí)行步驟A25 ; A25、所述通信包讀取引擎模塊根據(jù)所述第三讀取位置判斷是否需要讀取所述待發(fā)送通信包的內(nèi)存區(qū),如果是,則執(zhí)行步驟A26,否則執(zhí)行步驟A27 ; A26、讀所述待發(fā)送通信包的發(fā)內(nèi)存區(qū)數(shù)據(jù);所述網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)所述待發(fā)送通信包和內(nèi)存區(qū)位置,獲取所述待發(fā)送通信包中要發(fā)送的內(nèi)存區(qū)字節(jié)數(shù)組,并更新所述待發(fā)送通信包的讀取位置為第四讀取位置,然后執(zhí)行步驟A27 ; A27、所述通信包讀取引擎模塊根據(jù)所述第四讀取位置判斷是否需要讀取所述待發(fā)送通信包的文件區(qū),如果是,則執(zhí)行步驟A28,否則執(zhí)行步驟A29 ; A28、讀所述待發(fā)送通信包的發(fā)文件區(qū)數(shù)據(jù);所述網(wǎng)絡(luò)發(fā)送引擎模塊根據(jù)所述待發(fā)送通信包和文件區(qū)位置,獲取所述待發(fā)送通信包中要發(fā)送的文件區(qū)字節(jié)數(shù)組,根據(jù)獲取的待發(fā)送通信包中要發(fā)送的包頭字節(jié)數(shù)組、保留區(qū)字節(jié)數(shù)據(jù)、內(nèi)存區(qū)字節(jié)數(shù)組、文件區(qū)字節(jié)數(shù)組生成發(fā)送數(shù)據(jù),然后執(zhí)行步驟A29 ; A29、所述通信包讀取引擎模塊根據(jù)所述當前生成的發(fā)送數(shù)據(jù)的源長度和待發(fā)送通信包的包頭中的源長度是否相等,如果是,則判斷所述待發(fā)送通信包已經(jīng)讀完成。
4.根據(jù)權(quán)利要求1或3所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法,其特征在于,所述步驟B具體包括以下步驟: B1、所述接收裝置的網(wǎng)絡(luò)接收引擎模塊從所述發(fā)送裝置獲取所述接收數(shù)據(jù),如果所接收的數(shù)據(jù)不為空,則執(zhí)行步驟B2 ; B2、所述接收裝置的通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),如需要寫,則執(zhí)行寫通信包操作,生成所述接收通信包;寫通信包完成后,執(zhí)行步驟B3 ; B3、所述接收裝置的通信包寫入引擎模塊判斷所述接收數(shù)據(jù)是否全部寫完,如果否,則執(zhí)行步驟B2,如果是,則執(zhí)行步驟B4 ; B4、所述接收裝置的接收事件調(diào)度引擎模塊異步通知所述上層已從網(wǎng)絡(luò)中接收到通信包,然后繼續(xù)執(zhí)行步驟BI。
5.根據(jù)權(quán)利要求4所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法,其特征在于,所述步驟B2具體包括以下步驟: B21、所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當前寫通信包的位置是否處于包頭區(qū)域,如果是,則執(zhí)行步驟B22,否則執(zhí)行步驟B23 ; B22、所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和包頭緩存數(shù)據(jù)進行整合,當整合數(shù)據(jù)長度等于包頭的長度時,則寫入通信包包頭中;然后執(zhí)行步驟B23 ; B23、所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當前寫通信包的位置是否處于保留區(qū)區(qū)域,如果是,則執(zhí)行 步驟B24,否則執(zhí)行步驟B25 ; B24、所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和保留區(qū)緩存數(shù)據(jù)進行整合,當整合數(shù)據(jù)長度等于保留區(qū)長度是,則寫入通信包保留區(qū)中;然后執(zhí)行步驟B25 ; B25:所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當前寫通信包的位置是否處于內(nèi)存區(qū)區(qū)域,如果是,則執(zhí)行步驟B26,否則執(zhí)行步驟B27 ; B26:所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和內(nèi)存區(qū)緩存數(shù)據(jù)進行整合,當整合數(shù)據(jù)長度等于內(nèi)存區(qū)數(shù)據(jù)長度時,則寫入通信包內(nèi)存區(qū)中,然后執(zhí)行步驟B27; B27、所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當前寫通信包的位置是否處于文件頭信息和分塊信息的區(qū)域,如果是,則執(zhí)行步驟B28,否則執(zhí)行步驟B29 ; B28、所述通信包寫入引擎模塊根據(jù)當前所在文件區(qū)域的位置,在通信包中寫入完整的文件頭信息或分塊信息;根據(jù)寫入通信包包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的數(shù)據(jù)生成所述接收通信包,然后執(zhí)行步驟B29 ; B29、所述通信包寫入引擎模塊判斷當前生成的接收通信包的源長度和所述接收數(shù)據(jù)的包頭中的源長度是否相等,如果是,則認為當前通信包寫完成。
6.根據(jù)權(quán)利要求1所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法,其特征在于,所述包頭用于描述通信包的組成結(jié)構(gòu)和業(yè)務邏輯信息。
7.—種在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的系統(tǒng),其特征在于,包括: 發(fā)送裝置(100),用于從待發(fā)送的通信包隊列中取出待發(fā)送通信包,生成發(fā)送數(shù)據(jù),并將所述發(fā)送數(shù)據(jù)發(fā)送出去;所述發(fā)送數(shù)據(jù)是通信包,所述發(fā)送數(shù)據(jù)由包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的一個或多個組成;接收裝置(200),與所述發(fā)送裝置(100)連接,用于接收所述發(fā)送裝置發(fā)送過來的發(fā)送數(shù)據(jù),如果接收數(shù)據(jù)不為空,則根據(jù)所述接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),生成接收通信包。
8.根據(jù)權(quán)利要求7所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的系統(tǒng),其特征在于,所述發(fā)送裝置(100)包括: 通信包隊列弓I擎模塊(11),用于從所述待發(fā)送通信包隊列中取出所述待發(fā)送通信包; 通信包讀取引擎模塊(12)與所述通信包隊列引擎模塊(11)連接,用于讀取所述待發(fā)送通信包的內(nèi)容,生成所述發(fā)送數(shù)據(jù),傳遞給網(wǎng)絡(luò)發(fā)送引擎模塊; 網(wǎng)絡(luò)發(fā)送引擎模塊(13)與所述通信包讀取引擎模塊(12)連接,用于將所述發(fā)送數(shù)據(jù)發(fā)送出去; 發(fā)送事件調(diào)度引擎模塊(14)與所述網(wǎng)絡(luò)發(fā)送引擎模塊(13)連接,用于判斷是否發(fā)送完成,完成則通知上層發(fā)送數(shù)據(jù)完成。
9.根據(jù)權(quán)利要求8所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的系統(tǒng),其特征在于,所述接收裝置(200)包括: 網(wǎng)絡(luò)接收引擎模塊(21),用于從所述發(fā)送裝置獲取所述接收數(shù)據(jù); 通信包寫入引擎模塊(22),與所述網(wǎng)絡(luò)接收引擎模塊(21)連接,用于根據(jù)所述接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),如需要寫,則執(zhí)行寫通信包操作,生成所述接收通信包; 接收事件調(diào)度引擎模塊(23),與所述通信包寫入引擎模塊(22)連接,用于在寫通信包完成后,根據(jù)生成的所述接收通信包,異步通知上層已從網(wǎng)絡(luò)中接收到通信包; 所述通信包寫入引擎模 塊還用于判斷所述接收數(shù)據(jù)是否全部寫完,如果否,則繼續(xù)執(zhí)行寫操作。
10.根據(jù)權(quán)利要求7所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的裝置,其特征在于,所述包頭用于描述通信包的組成結(jié)構(gòu)和業(yè)務邏輯信息。
全文摘要
本發(fā)明涉及一種在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法及系統(tǒng),其中,該方法包括步驟A.發(fā)送裝置從待發(fā)送的通信包隊列中取出待發(fā)送通信包,生成發(fā)送數(shù)據(jù),并將該發(fā)送數(shù)據(jù)發(fā)送出去;所述發(fā)送數(shù)據(jù)是通信包,所述發(fā)送數(shù)據(jù)由包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的一個或多個組成;B.接收裝置接收所述發(fā)送裝置發(fā)送過來的發(fā)送數(shù)據(jù),如果接收數(shù)據(jù)不為空,則根據(jù)接收數(shù)據(jù)判斷是否需要寫通信包的包頭、保留區(qū)、內(nèi)存區(qū)或文件區(qū),生成接收通信包。實施本發(fā)明的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法及系統(tǒng),可以規(guī)范化傳輸數(shù)據(jù),可降低網(wǎng)絡(luò)傳輸流量、降低數(shù)據(jù)通信開發(fā)的復雜度、提高網(wǎng)絡(luò)安全。
文檔編號H04L12/863GK103118023SQ20131003589
公開日2013年5月22日 申請日期2013年1月30日 優(yōu)先權(quán)日2013年1月30日
發(fā)明者邢智剛 申請人:深圳聯(lián)友科技有限公司