專利名稱:一種在網(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è)應(yīng)用開發(fā)任務(wù)中,在服務(wù)器、服務(wù)器和客戶端之間的網(wǎng)絡(luò)環(huán)境中,傳遞規(guī)范的業(yè)務(wù)數(shù)據(jù),是一項非常重要而艱巨的任務(wù),常常占據(jù)了應(yīng)用開發(fā)任務(wù)的大部分開發(fā)時間。現(xiàn)有企業(yè)應(yīng)用開發(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)容是什么,誰應(yīng)當(dāng)處理它以及它是可選的還是必須的;S0BP編碼規(guī)則:它定義了一種序列化的機制,用于交換應(yīng)用程序所定義的數(shù)據(jù)類型的實例;S0BP RPB表示:它定義了用于表示遠(yuǎn)程過程調(diào)用和應(yīng)答的協(xié)定;S0BP綁定:定義了一種使用底層傳輸協(xié)議來完成在節(jié)點間交換SOBP封裝的約定。SOBP的主要缺點如下:1、復(fù)雜度高。SOBP包括四個部分,而且每個部分都依賴于其他部分,耦合度低。數(shù)據(jù)解析算法復(fù)雜;2、數(shù)據(jù)開銷大且安全性低。因為SOBP是基于XML協(xié)議封裝的,XML是基于文本解析的一種協(xié)議,使用文本對數(shù)據(jù)進行封裝會導(dǎo)致數(shù)據(jù)開銷大而且導(dǎo)致系統(tǒng)安全性極低。如果采用XML壓縮和加密,又會加大數(shù)據(jù)處理的時間;3、只關(guān)心內(nèi)存數(shù)據(jù)封裝,沒有關(guān)注文件數(shù)據(jù)的封裝。所有的SOBP XML解析都在內(nèi)存中進行,會導(dǎo)致內(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è)務(wù)邏輯處理關(guān)注不夠。企業(yè)應(yīng)用開發(fā)中非常多的關(guān)注于業(yè)務(wù)邏輯處理:調(diào)用業(yè)務(wù)邏輯處理模塊和功能、業(yè)務(wù)邏輯處理正常返回的數(shù)據(jù)以及業(yè)務(wù)邏輯處理異常通知及異常數(shù)據(jù)等,SOBP對業(yè)務(wù)邏輯關(guān)注不夠,導(dǎo)致企業(yè)應(yīng)用開發(fā)要在SOBP上再次封裝業(yè)務(wù)邏輯協(xié)議,增加開發(fā)難度。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的數(shù)據(jù)傳遞中采用SOBP的缺陷,提供一種降低開發(fā)復(fù)雜度,快速實現(xiàn)業(yè)務(wù)邏輯開發(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ù)當(dāng)前第一讀取位置判斷是否需要讀取所述待發(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ù)判斷當(dāng)前寫通信包的位置是否處于包頭區(qū)域,如果是,則執(zhí)行步驟B22,否則執(zhí)行步驟B23 ;B22、所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和包頭緩存數(shù)據(jù)進行整合,當(dāng)整合數(shù)據(jù)長度等于包頭的長度時,則寫入通信包包頭中;然后執(zhí)行步驟B23 ;B23、所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當(dāng)前寫通信包的位置是否處于保留區(qū)區(qū)域,如果是,則執(zhí)行步驟B24,否則執(zhí)行步驟B25 ;B24、所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和保留區(qū)緩存數(shù)據(jù)進行整合,當(dāng)整合數(shù)據(jù)長度等于保留區(qū)長度是,則寫入通信包保留區(qū)中;然后執(zhí)行步驟B25 ;B25:所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當(dāng)前寫通信包的位置是否處于內(nèi)存區(qū)區(qū)域,如果是,則執(zhí)行步驟B26,否則執(zhí)行步驟B27 ;B26:所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和內(nèi)存區(qū)緩存數(shù)據(jù)進行整合,當(dāng)整合數(shù)據(jù)長度等于內(nèi)存區(qū)數(shù)據(jù)長度時,則寫入通信包內(nèi)存區(qū)中,然后執(zhí)行步驟B27 ;B27、所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當(dāng)前寫通信包的位置是否處于文件頭信息和分塊信息的區(qū)域,如果是,則執(zhí)行步驟B28,否則執(zhí)行步驟B29 ;B28、所述通信包寫入引擎模塊根據(jù)當(dāng)前所在文件區(qū)域的位置,在通信包中寫入完整的文件頭信息或分塊信息;根據(jù)寫入通信包包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的數(shù)據(jù)生成所述接收通信包,然后執(zhí)行步驟B29 ;B29、所述通信包寫入引擎模塊判斷當(dāng)前生成的接收通信包的源長度和所述接收數(shù)據(jù)的包頭中的源長度是否相等,如果是,則認(rèn)為當(dāng)前通信包寫完成。在本發(fā)明所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法中,所述包頭用于描述通信包的組成結(jié)構(gòu)和業(yè)務(wù)邏輯信息。本發(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è)務(wù)邏輯信息。實施本發(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ā)的復(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ā)明進行進一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(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ā)送的通信包隊列的形成類似代辦任務(wù)隊列,發(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è)務(wù)邏輯系統(tǒng),或者是服務(wù)器對象等;可以這樣理解:使用這個發(fā)送數(shù)據(jù)的對象,因為它是位于相對這個網(wǎng)絡(luò)發(fā)送引擎模塊之上的。進一步的,步驟A2具體包括以下步驟(如圖3所示):A21、通信包讀取引擎模塊根據(jù)當(dāng)前第一讀取位置判斷是否需要讀取待發(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ù)當(dāng)前生成的發(fā)送數(shù)據(jù)的源長度和待發(fā)送通信包的包頭中的源長度是否相等,如果是,則判斷待發(fā)送通信包已經(jīng)讀完成。該待發(fā)送通信包的包頭中的源長度即為表二中的第11項數(shù)值。進一步的,步驟B具體包括以下步驟(如圖4所示):B1、該接收裝置的網(wǎng)絡(luò)接收引擎模塊從發(fā)送裝置獲取接收數(shù)據(jù),如果接收數(shù)據(jù)不為空,則執(zhí)行步驟B2 ;該發(fā)送裝置可以是服務(wù)器、客戶端、移動端等通信終端,各通信終端之間以通信包進行數(shù)據(jù)傳輸;通信包表達(dá)一組完整的業(yè)務(wù)邏輯的二進制數(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è)務(wù)邏輯系統(tǒng),或者是服務(wù)器對象等;可以這樣理解:使用這個接收數(shù)據(jù)的對象,因為它是位于相對這個通信包寫入引擎模塊之上的。在該步驟中,接收事件調(diào)度引擎模塊異步通知上層已從網(wǎng)絡(luò)中接收到通信包,該異步通知可以使用后臺線程、異步I/O 口等方法實現(xiàn)。進一步的,步驟B2具體包括以下步驟(如圖5所示):B21、通信包寫入引擎模塊根據(jù)接收數(shù)據(jù)判斷當(dāng)前寫通信包的位置是否處于包頭區(qū)域,如果是,則執(zhí)行步驟B12,否則執(zhí)行步驟B13 ;B22、通信包寫入引擎模塊將接收數(shù)據(jù)和包頭緩存數(shù)據(jù)進行整合,當(dāng)整合數(shù)據(jù)長度等于包頭的長度時,則寫入通信包包頭中;當(dāng)整合數(shù)據(jù)長度小于包頭的長度時,則繼續(xù)將接收數(shù)據(jù)堆加在包頭緩存數(shù)據(jù)中,然后執(zhí)行步驟B23 ;在步驟B21中的包頭緩存數(shù)據(jù)是一塊臨時數(shù)據(jù),按包頭的大小分配在系統(tǒng)內(nèi)存中;當(dāng)整合完成后,即緩存數(shù)據(jù)一旦完整寫完后,則將整合后的數(shù)據(jù)寫入通信包包頭中;B23、通信包寫入引擎模塊根據(jù)接收數(shù)據(jù)判斷當(dāng)前寫通信包的位置是否處于保留區(qū)區(qū)域,如果是,則執(zhí)行步驟B24,否則執(zhí)行步驟B25 ;B24、通信包寫入引擎模塊將接收數(shù)據(jù)和保留區(qū)緩存數(shù)據(jù)進行整合,當(dāng)整合數(shù)據(jù)長度等于保留區(qū)長度是,則寫入通信包保留區(qū)中;當(dāng)整合數(shù)據(jù)長度小于保留區(qū)長度時,則繼續(xù)接收數(shù)據(jù)堆加在保留區(qū)緩存數(shù)據(jù)中然后執(zhí)行步驟B25 ;B25:通信包寫入引擎模塊根據(jù)接收數(shù)據(jù)判斷當(dāng)前寫通信包的位置是否處于內(nèi)存區(qū)區(qū)域,如果是,則執(zhí)行步驟B26,否則執(zhí)行步驟B27 ;B26:通信包寫入引擎模塊將接收數(shù)據(jù)和內(nèi)存區(qū)緩存數(shù)據(jù)進行整合,當(dāng)整合數(shù)據(jù)長度等于內(nèi)存區(qū)數(shù)據(jù)長度時,則寫入通信包內(nèi)存區(qū)中,然后執(zhí)行步驟B27 ;B27、通信包寫入引擎模塊根據(jù)接收數(shù)據(jù)判斷當(dāng)前寫通信包的位置是否處于文件頭信息和分塊信息的區(qū)域,如果是,則執(zhí)行步驟B28,否則執(zhí)行步驟B29 ;B28、通信包寫入引擎模塊根據(jù)當(dāng)前所在文件區(qū)域的位置,在通信包中寫入完整的文件頭信息或分塊信息;根據(jù)寫入通信包包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的數(shù)據(jù)生成該接收通信包,然后執(zhí)行步驟B29 ;在該步驟B28中,需要首先判斷是寫入文件頭信息還是寫入分塊信息;B29、通信包寫入引擎模塊判斷當(dāng)前生成的接收通信包的源長度和該接收數(shù)據(jù)的包頭中的源長度是否相等,如果是,則認(rèn)為當(dāng)前通信包寫完成。該接收數(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è)務(wù)邏輯信息;該通信包表達(dá)一組完整的業(yè)務(wù)邏輯的二進制數(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ù)當(dāng)前第一讀取位置判斷是否需要讀取所述待發(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ù)所述當(dāng)前生成的發(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ù)判斷當(dāng)前寫通信包的位置是否處于包頭區(qū)域,如果是,則執(zhí)行步驟B22,否則執(zhí)行步驟B23 ; B22、所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和包頭緩存數(shù)據(jù)進行整合,當(dāng)整合數(shù)據(jù)長度等于包頭的長度時,則寫入通信包包頭中;然后執(zhí)行步驟B23 ; B23、所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當(dāng)前寫通信包的位置是否處于保留區(qū)區(qū)域,如果是,則執(zhí)行 步驟B24,否則執(zhí)行步驟B25 ; B24、所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和保留區(qū)緩存數(shù)據(jù)進行整合,當(dāng)整合數(shù)據(jù)長度等于保留區(qū)長度是,則寫入通信包保留區(qū)中;然后執(zhí)行步驟B25 ; B25:所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當(dāng)前寫通信包的位置是否處于內(nèi)存區(qū)區(qū)域,如果是,則執(zhí)行步驟B26,否則執(zhí)行步驟B27 ; B26:所述通信包寫入引擎模塊將所述接收數(shù)據(jù)和內(nèi)存區(qū)緩存數(shù)據(jù)進行整合,當(dāng)整合數(shù)據(jù)長度等于內(nèi)存區(qū)數(shù)據(jù)長度時,則寫入通信包內(nèi)存區(qū)中,然后執(zhí)行步驟B27; B27、所述通信包寫入引擎模塊根據(jù)所述接收數(shù)據(jù)判斷當(dāng)前寫通信包的位置是否處于文件頭信息和分塊信息的區(qū)域,如果是,則執(zhí)行步驟B28,否則執(zhí)行步驟B29 ; B28、所述通信包寫入引擎模塊根據(jù)當(dāng)前所在文件區(qū)域的位置,在通信包中寫入完整的文件頭信息或分塊信息;根據(jù)寫入通信包包頭、保留區(qū)、內(nèi)存區(qū)、文件區(qū)中的數(shù)據(jù)生成所述接收通信包,然后執(zhí)行步驟B29 ; B29、所述通信包寫入引擎模塊判斷當(dāng)前生成的接收通信包的源長度和所述接收數(shù)據(jù)的包頭中的源長度是否相等,如果是,則認(rèn)為當(dāng)前通信包寫完成。
6.根據(jù)權(quán)利要求1所述的在網(wǎng)絡(luò)中傳送規(guī)范數(shù)據(jù)的方法,其特征在于,所述包頭用于描述通信包的組成結(jié)構(gòu)和業(yè)務(wù)邏輯信息。
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è)務(wù)邏輯信息。
全文摘要
本發(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ā)的復(fù)雜度、提高網(wǎng)絡(luò)安全。
文檔編號H04L12/863GK103118023SQ20131003589
公開日2013年5月22日 申請日期2013年1月30日 優(yōu)先權(quán)日2013年1月30日
發(fā)明者邢智剛 申請人:深圳聯(lián)友科技有限公司