欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種傳輸數(shù)據(jù)的方法和裝置與流程

文檔序號(hào):12493747閱讀:169來(lái)源:國(guó)知局
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種傳輸數(shù)據(jù)的方法和裝置。
背景技術(shù)
:現(xiàn)有傳輸數(shù)據(jù)的實(shí)現(xiàn)技術(shù)方案主要是使用可擴(kuò)展標(biāo)記語(yǔ)言(XML)、對(duì)象標(biāo)記(JSON)等通用數(shù)據(jù)交換格式作為通信協(xié)議來(lái)完成跨平臺(tái)間的消息通信及數(shù)據(jù)交換。更進(jìn)一步地會(huì)提供一些輔助功能,諸如提供基于元數(shù)據(jù)描述文件來(lái)生成通訊協(xié)議接口的功能。XML和JSON此類文本協(xié)議本身具有冗余數(shù)據(jù)多、解析復(fù)雜等缺點(diǎn),原因是它們傳輸數(shù)據(jù)時(shí),除了需要傳輸有效數(shù)據(jù)以外,還需要傳輸一系列XML或JSON標(biāo)簽等冗余數(shù)據(jù)。在解析時(shí),也需要首先進(jìn)行標(biāo)簽匹配,然后才能抽取有效數(shù)據(jù)。這些缺點(diǎn)導(dǎo)致消息通訊時(shí)存在解析效率低下、占用網(wǎng)絡(luò)帶寬較高、CPU資源使用率較高等問(wèn)題。此外,由于利用XML和JSON傳輸數(shù)據(jù),要求通訊雙方的通信協(xié)議版本必須保持一致,否則數(shù)據(jù)無(wú)法正常傳輸。綜上,現(xiàn)有技術(shù)中在雙方的通信協(xié)議版本不一致的情況下無(wú)法傳輸數(shù)據(jù),而且在雙方的通信協(xié)議版本一致的情況下傳輸數(shù)據(jù)時(shí),占用網(wǎng)絡(luò)帶寬較高且CPU資源使用率較高。技術(shù)實(shí)現(xiàn)要素:本發(fā)明實(shí)施例提供了一種傳輸數(shù)據(jù)的方法,能夠在雙方的通信協(xié)議版本不一致的情況下傳輸數(shù)據(jù),同時(shí)有效降低占用網(wǎng)絡(luò)帶寬和CPU資源使用率。本發(fā)明實(shí)施例還提供了一種傳輸數(shù)據(jù)的裝置,能夠在雙方的通信協(xié)議版本不一致的情況下傳輸數(shù)據(jù),同時(shí)有效降低占用網(wǎng)絡(luò)帶寬和CPU資源使用率。一種傳輸數(shù)據(jù)的方法,所述方法包括:通過(guò)握手向下兼容通信協(xié)議版本;依據(jù)所述通信協(xié)議版本按照字段類型的順序,編碼消息命令獲得編碼結(jié)果;發(fā)送編碼結(jié)果??蛇x的,所述通過(guò)握手向下兼容通信協(xié)議版本,包括:通過(guò)握手獲知通信協(xié)議版本不同,采用向下兼容的通信協(xié)議版本。可選的,所述字段類型,包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼和內(nèi)嵌命令編碼??蛇x的,所述方法還包括:緩存所述消息命令的消息內(nèi)容,設(shè)置所述消息命令與標(biāo)識(shí)的映射關(guān)系;所述編碼消息命令,包括:消息內(nèi)容存儲(chǔ)在緩存,依據(jù)所述消息命令和映射關(guān)系獲取所述消息命令對(duì)應(yīng)的標(biāo)識(shí),編碼帶有標(biāo)識(shí)的消息命令;消息內(nèi)容不存儲(chǔ)在緩存,為所述消息命令設(shè)置對(duì)應(yīng)的標(biāo)識(shí),編碼帶有標(biāo)識(shí)和消息內(nèi)容的消息命令。可選的,所述字段類型,包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼、內(nèi)嵌命令編碼和緩存內(nèi)嵌命令編碼。一種傳輸數(shù)據(jù)的方法,所述方法包括:通過(guò)握手向下兼容通信協(xié)議版本;接收編碼結(jié)果;依據(jù)所述通信協(xié)議版本按照字段類型的順序,解碼編碼結(jié)果獲得消息命令??蛇x的,所述通過(guò)握手向下兼容通信協(xié)議版本,包括:通過(guò)握手獲知通信協(xié)議版本不同,采用向下兼容的通信協(xié)議版本??蛇x的,所述字段類型,包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼和內(nèi)嵌命令編碼??蛇x的,所述方法還包括:緩存所述消息命令的消息內(nèi)容,設(shè)置所述消息命令與標(biāo)識(shí)的映射關(guān)系;所述解碼編碼結(jié)果獲得消息命令,包括:消息內(nèi)容存儲(chǔ)在緩存,依據(jù)所述消息命令獲取所述消息命令對(duì)應(yīng)的標(biāo)識(shí),再按照所述標(biāo)識(shí)和映射關(guān)系獲得消息內(nèi)容;消息內(nèi)容不存儲(chǔ)在緩存,解碼編碼結(jié)果獲得消息內(nèi)容??蛇x的,所述字段類型,包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼、內(nèi)嵌命令編碼和緩存內(nèi)嵌命令編碼。一種傳輸數(shù)據(jù)的裝置,所述裝置包括:協(xié)議自動(dòng)協(xié)商管理器,用于通過(guò)握手向下兼容通信協(xié)議版本;命令編/解碼器,用于依據(jù)所述通信協(xié)議版本按照字段類型的順序,編碼消息命令獲得編碼結(jié)果,發(fā)送編碼結(jié)果??蛇x的,所述協(xié)議自動(dòng)協(xié)商管理器,還用于通過(guò)握手獲知通信協(xié)議版本不同,采用向下兼容的通信協(xié)議版本??蛇x的,所述字段類型,包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼和內(nèi)嵌命令編碼??蛇x的,所述裝置還包括:消息命令緩存管理器,用于緩存所述消息命令的消息內(nèi)容,設(shè)置所述消息命令與標(biāo)識(shí)的映射關(guān)系;所述命令編/解碼器,還用于消息內(nèi)容存儲(chǔ)在緩存,依據(jù)所述消息命令和映射關(guān)系獲取所述消息命令對(duì)應(yīng)的標(biāo)識(shí),編碼帶有標(biāo)識(shí)的消息命令;消息內(nèi)容不存儲(chǔ)在緩存,為所述消息命令設(shè)置對(duì)應(yīng)的標(biāo)識(shí),編碼帶有標(biāo)識(shí)和消息內(nèi)容的消息命令。可選的,所述字段類型,包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼、內(nèi)嵌命令編碼和緩存內(nèi)嵌命令編碼。一種傳輸數(shù)據(jù)的裝置,所述裝置包括:協(xié)議自動(dòng)協(xié)商管理器,用于通過(guò)握手向下兼容通信協(xié)議版本;命令編/解碼器,用于接收編碼結(jié)果,依據(jù)所述通信協(xié)議版本按照字段類型的順序,解碼編碼結(jié)果獲得消息命令??蛇x的,所述協(xié)議自動(dòng)協(xié)商管理器,還用于通過(guò)握手獲知通信協(xié)議版本不同,采用向下兼容的通信協(xié)議版本??蛇x的,所述字段類型,包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼和內(nèi)嵌命令編碼。可選的,所述裝置還包括:消息命令緩存管理器,用于緩存所述消息命令的消息內(nèi)容,設(shè)置所述消息命令與標(biāo)識(shí)的映射關(guān)系;所述命令編/解碼器,還用于消息內(nèi)容存儲(chǔ)在緩存,依據(jù)所述消息命令獲取所述消息命令對(duì)應(yīng)的標(biāo)識(shí),再按照所述標(biāo)識(shí)和映射關(guān)系獲得消息內(nèi)容;消息命令不存儲(chǔ)在緩存,解碼編碼結(jié)果獲得消息內(nèi)容??蛇x的,所述字段類型,包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼、內(nèi)嵌命令編碼和緩存內(nèi)嵌命令編碼。從上述技術(shù)方案中可以看出,在本發(fā)明實(shí)施例中通過(guò)握手向下兼容通信協(xié)議版本;依據(jù)所述通信協(xié)議版本按照字段類型的順序,編碼消息命令獲得編碼結(jié)果;發(fā)送編碼結(jié)果。能夠在雙方的通信協(xié)議版本不一致的情況下傳輸數(shù)據(jù),而且編碼結(jié)果長(zhǎng)度遠(yuǎn)遠(yuǎn)小于現(xiàn)有編碼的長(zhǎng)度,因此有效降低了占用網(wǎng)絡(luò)帶寬和CPU資源使用率。附圖說(shuō)明從下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式的描述中可以更好地理解本發(fā)明其中,相同或相似的附圖標(biāo)記表示相同或相似的特征。圖1為本發(fā)明第一實(shí)施例中傳輸數(shù)據(jù)的方法流程示意圖;圖2為本發(fā)明第一實(shí)施例中通過(guò)握手向下兼容通信協(xié)議版本的流程示意圖;圖3為本發(fā)明第一實(shí)施例中發(fā)送端緩存消息命令的流程示意圖;圖4為本發(fā)明第二實(shí)施例中傳輸數(shù)據(jù)的方法流程示意圖;圖5為本發(fā)明第二實(shí)施例中接收端緩存消息命令的流程示意圖;圖6為本發(fā)明第三實(shí)施例中傳輸數(shù)據(jù)的裝置結(jié)構(gòu)示意圖;圖7為本發(fā)明第四實(shí)施例中傳輸數(shù)據(jù)的裝置結(jié)構(gòu)示意圖;圖8為本發(fā)明實(shí)施例中發(fā)送端與接收端交互數(shù)據(jù)的結(jié)構(gòu)示意圖。具體實(shí)施方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)表達(dá)得更加清楚明白,下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明再作進(jìn)一步詳細(xì)的說(shuō)明。在本發(fā)明實(shí)施例中,首先通過(guò)握手向下兼容通信協(xié)議版本,這樣就可以在發(fā)送方與接收方的通信協(xié)議版本不一致的情況下傳輸數(shù)據(jù);然后,依據(jù)通信協(xié)議版本按照字段類型的順序,編碼消息命令獲得編碼結(jié)果;發(fā)送編碼結(jié)果。由于上述編碼結(jié)果所占用的字節(jié)遠(yuǎn)遠(yuǎn)小于現(xiàn)有技術(shù)中采用XML和JSON編碼所占用的字節(jié),因此有效降低了占用網(wǎng)絡(luò)帶寬和CPU資源使用率。參見(jiàn)圖1為實(shí)施例一中傳輸數(shù)據(jù)的方法流程示意圖,本實(shí)施例應(yīng)用于數(shù)據(jù)的發(fā)送端,具體包括:101、通過(guò)握手向下兼容通信協(xié)議版本。數(shù)據(jù)需要從發(fā)送端傳輸至接收端,發(fā)送端可以是客戶端,那么對(duì)應(yīng)接收端可以是服務(wù)器端;發(fā)送端是客戶端,對(duì)應(yīng)接收端還可以是其他客戶端;發(fā)送端是服務(wù)器端,對(duì)應(yīng)接收端可以是服務(wù)器端;發(fā)送端是服務(wù)器端,對(duì)應(yīng)接收端還可以是客戶端。也就是說(shuō),數(shù)據(jù)可以在客戶端之間,服務(wù)器之間,客戶端與服務(wù)器之間任意的傳輸。通過(guò)握手獲知通信協(xié)議版本不同,采用向下兼容的通信協(xié)議版本。即,在協(xié)議雙方開(kāi)始通訊時(shí),首先發(fā)送協(xié)議自協(xié)商報(bào)文,基于協(xié)議版本向下兼容的原則,通過(guò)一次報(bào)文交換,通信雙方即可完成協(xié)議的自協(xié)商功能,在復(fù)雜的環(huán)境下支持不同版本的并行使用。具體的,參見(jiàn)圖2為通過(guò)握手向下兼容通信協(xié)議版本的流程示意圖,具體包括:1011、發(fā)送端向接收端發(fā)送協(xié)議協(xié)商命令。當(dāng)發(fā)送端端主動(dòng)連接接收端時(shí),將發(fā)送端通信協(xié)議版本號(hào)信息攜帶在協(xié)議協(xié)商命令中,經(jīng)編碼成字節(jié)數(shù)組并寫入網(wǎng)絡(luò)。1012、確定向下兼容通信協(xié)議版本。接收端從網(wǎng)絡(luò)讀取該字節(jié)數(shù)組,經(jīng)解碼得到協(xié)議協(xié)商命令,根據(jù)協(xié)議協(xié)商命令中的發(fā)送端通信協(xié)議版本號(hào)信息確定發(fā)送端使用通信協(xié)議版本。比較接收端使用通信協(xié)議版本與發(fā)送端使用通信協(xié)議版本。若接收端使用通信協(xié)議版本高于發(fā)送端使用通信協(xié)議版本,則發(fā)送將接收端使用通信協(xié)議版本修正為發(fā)送端使用通信協(xié)議版本的消息給接收端,以使接收端將自身通信協(xié)議參數(shù)設(shè)置為發(fā)送端通信協(xié)議參數(shù),實(shí)現(xiàn)向下兼容。并發(fā)送協(xié)商結(jié)果給發(fā)送端,協(xié)商結(jié)果為發(fā)送端繼續(xù)使用當(dāng)前客戶端通信協(xié)議版本進(jìn)行通信的消息。若接收端使用通信協(xié)議版本低于發(fā)送端使用通信協(xié)議版本,則發(fā)送協(xié)商結(jié)果給發(fā)送端,協(xié)商結(jié)果為將發(fā)送端使用通信協(xié)議版本修正為接收端使用通信協(xié)議版本的消息,以使發(fā)送端將自身通信協(xié)議參數(shù)設(shè)置為服務(wù)端通信協(xié)議參數(shù),實(shí)現(xiàn)向下兼容。1013、根據(jù)協(xié)商結(jié)果進(jìn)行通信。發(fā)送端與接收端根據(jù)協(xié)商結(jié)果進(jìn)行通信。支持新舊版本通信協(xié)議版本的并存,具備自協(xié)商能力,雙方通過(guò)握手來(lái)協(xié)商通信協(xié)議版本,具有更高的通用性。由于無(wú)需關(guān)注發(fā)送端和接收端的協(xié)議版本,兼容性更好。不同版本的通信協(xié)議所包括的字段類型和字段類型的順序都是相同的。102、依據(jù)通信協(xié)議版本按照字段類型的順序,編碼消息命令獲得編碼結(jié)果。確定通信協(xié)議版本后,在對(duì)消息命令編碼時(shí),按照字段類型和字段類型的順序,獲得編碼結(jié)果。參見(jiàn)表1:字段類型包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼和內(nèi)嵌命令編碼。參見(jiàn)表1:字段類型的順序依次為:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼和內(nèi)嵌命令編碼。表1對(duì)于表1中的各項(xiàng)字段類型,有以下具體的說(shuō)明:1、字節(jié)順序:采用大端模式。大端模式:是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的低地址中,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的高地址中。目前多數(shù)處理器使用大端模式,網(wǎng)絡(luò)上傳輸數(shù)據(jù)也采用的都是大端,所以本發(fā)明中也選用大端模式。例如,參見(jiàn)表2對(duì)于十六進(jìn)制數(shù)0x12345678在內(nèi)存中的表示。表2內(nèi)存地址(低->高)0123大端模式123456782、消息報(bào)文格式消息報(bào)文是由多個(gè)命令順序組成。3、命令編碼命令編碼格式:長(zhǎng)度(4字節(jié))+類型(1字節(jié))+命令字段集([長(zhǎng)度-1]字節(jié))。4、命令字段編碼字段基本類型包括:基本類型、字符串、字節(jié)數(shù)組、內(nèi)嵌命令和緩存內(nèi)嵌命令。5、基本類型編碼基本類型編碼格式:byte(1字節(jié))、boolean(1字節(jié))、char(2字節(jié))、short(2字節(jié))、int(4字節(jié))、long(8字節(jié))、float(4字節(jié))以及double(8字節(jié))。6、字符串編碼字符串編碼格式:非空標(biāo)志(1字節(jié))+長(zhǎng)度(2字節(jié))+字符串內(nèi)容([長(zhǎng)度]字節(jié))。a)長(zhǎng)度和字符串內(nèi)容只在[非空標(biāo)志=1]時(shí)才存在;b)字符串的內(nèi)容使用UTF編碼表示。7、字節(jié)數(shù)組編碼字節(jié)數(shù)組編碼格式:非空標(biāo)志(1字節(jié))+長(zhǎng)度(4字節(jié))+數(shù)組內(nèi)容([長(zhǎng)度]字節(jié))。a)長(zhǎng)度和數(shù)組內(nèi)容只在[非空標(biāo)志=1]時(shí)才存在。8、內(nèi)嵌命令編碼內(nèi)嵌命令編碼格式:非空標(biāo)志(1字節(jié))+類型(1字節(jié))+內(nèi)嵌命令內(nèi)容。a)類型和內(nèi)嵌命令內(nèi)容只在[非空標(biāo)志=1]時(shí)才存在;b)每個(gè)命令包含唯一類型標(biāo)識(shí)。下面通過(guò)一個(gè)具體的實(shí)施方式詳細(xì)說(shuō)明按照字段類型的順序進(jìn)行編碼。對(duì)于一個(gè)Java類Person,其定義如表3:表3對(duì)于對(duì)象參見(jiàn)表4:表41、編碼中每個(gè)字段的具體解釋參見(jiàn)表5:表52、消息報(bào)文格式此處對(duì)象Person即一個(gè)命令,傳輸多個(gè)Person信息時(shí),即順序連接多個(gè)Person,具體連接方式參見(jiàn)表6::表63、命令編碼按照表7的格式對(duì)表6每一個(gè)Person對(duì)應(yīng)一次編碼,即命令編碼。表7每個(gè)Person對(duì)應(yīng)一次編碼,對(duì)應(yīng)編碼后的內(nèi)容為0000003a,占4字節(jié),表示person對(duì)象編碼后的長(zhǎng)度為58個(gè)字節(jié),具體表示參見(jiàn)表8:表8類型標(biāo)識(shí)用來(lái)區(qū)分不同的業(yè)務(wù)類型,例如person、book。不同的類型有不同的標(biāo)識(shí),表示Person對(duì)象的類型標(biāo)識(shí)為01。命令字段集占用剩下的57=[58-1]個(gè)字節(jié),即為person對(duì)象本身編碼后的內(nèi)容。4、命令字段編碼Person對(duì)象所有字段的編碼包括:基本類型、字符串、字節(jié)數(shù)組、內(nèi)嵌命令、緩存內(nèi)嵌命令。其中,基本類型包括字段education,married,gender,height,age,phone,salary,assets。字符串包括字段name;字節(jié)數(shù)組包括字段bwh;內(nèi)嵌命令包括字段address;緩存內(nèi)嵌命令為無(wú)。5、基本類型編碼基本類型中,字段education,married,gender,height,age,phone,salary,assets具體編碼結(jié)果及分別占用字節(jié)長(zhǎng)度參見(jiàn)表9:表9對(duì)于基本類型,在消息命令Person編碼時(shí),按照預(yù)存的類型與通信協(xié)議各字段類型(基本類型或非基本類型)及順序的對(duì)應(yīng)關(guān)系,以及根據(jù)消息命令類型確定對(duì)應(yīng)的字段類型及順序。相應(yīng)的,消息命令Person解碼時(shí),按照對(duì)應(yīng)的字段類型及順序,即第一個(gè)字段學(xué)歷education是byte類型,占用1個(gè)字節(jié),使用readByte方式讀取即可,第三個(gè)字段性別gender是char類型,占用2個(gè)字節(jié),使用readChar方式讀取即可。6、字符串編碼字符串字段name編碼格式為非空+長(zhǎng)度+內(nèi)容。參見(jiàn)表10,內(nèi)容為Jhon,具體編碼結(jié)果及占用字節(jié)長(zhǎng)度為:表107、字節(jié)數(shù)組編碼字節(jié)數(shù)組字段bwh編碼格式為非空+長(zhǎng)度+內(nèi)容,內(nèi)容為25、30、30,具體編碼結(jié)果及占用字節(jié)長(zhǎng)度參見(jiàn)表11:表118、內(nèi)嵌命令編碼內(nèi)嵌命令字段address編碼格式為非空+類型+內(nèi)容,內(nèi)容為郵編,由于內(nèi)嵌命令本身也是一個(gè)對(duì)象,即編碼為一個(gè)命令,因此,不再定義長(zhǎng)度,而定義字段類型,如整形字段,具體編碼結(jié)果及占用字節(jié)長(zhǎng)度參見(jiàn)表12:表12綜上,參見(jiàn)表13對(duì)一個(gè)Java類Persong編碼后長(zhǎng)度為62字節(jié),即通過(guò)采用變長(zhǎng)二進(jìn)制編碼格式,根據(jù)實(shí)際長(zhǎng)度實(shí)現(xiàn)二進(jìn)制編碼,而非現(xiàn)有定長(zhǎng)編碼格式。假定對(duì)象Person以消息的方式在網(wǎng)絡(luò)上進(jìn)行傳輸,分別使用XML、JSON和本協(xié)議編碼結(jié)果如下:1)XML:內(nèi)容:<person><education>1</education><married>true</married><gender>F</gender><height>170</height><age>23</age><phone>13677778888</phone><salary>5000.5</salary><assets>20000.5</assets><name>Jhon</name><bwh>GR4e</bwh><address><zipCode>100</zipCode></address></person>編碼長(zhǎng)度為261字節(jié)。2)JSON:內(nèi)容:{″Person″:{″e(cuò)ducation″:1,″married″:true,″gender″:″F″,″height″:170,″age″:23,″phone″:13677778888,″salary″:5000.5,″assets″:20000.5,″name″:″Jhon″,″bwh″:[″GR4e″],″address″:{″zipCode″:100}}}編碼長(zhǎng)度為184字節(jié)。3)本發(fā)明技術(shù)方案:內(nèi)容:0x0000003a010101004600aa00000017000000032f4257c8459c440040d388200000000001000600044a686f6e0100000003191e1e01020000000000000064編碼長(zhǎng)度為62字節(jié)??梢?jiàn),針對(duì)此對(duì)象,本發(fā)明技術(shù)方案的編碼效率分別是XML的4.5倍(261/62=4.2),是JSON的3.9倍(184/62=2.9),編碼長(zhǎng)度越小表示編碼效率越高;同時(shí)直觀可見(jiàn)XML和JSON存在較多冗余標(biāo)簽(如<person>和{″Person″等)。103、發(fā)送編碼結(jié)果。發(fā)送方向接收方發(fā)送編碼結(jié)果。由上述101-103的技術(shù)方案可知,首先通過(guò)握手向下兼容通信協(xié)議版本,這樣就可以在發(fā)送方與接收方的通信協(xié)議版本不一致的情況下傳輸數(shù)據(jù);然后,依據(jù)所述通信協(xié)議版本按照字段類型的順序,編碼消息命令獲得編碼結(jié)果;發(fā)送編碼結(jié)果。由于按照字段類型的順序編碼后的結(jié)果所占用的字節(jié)遠(yuǎn)遠(yuǎn)小于現(xiàn)有技術(shù)中采用XML和JSON編碼所占用的字節(jié),因此有效降低了占用網(wǎng)絡(luò)帶寬和CPU資源使用率。此外,在101-103技術(shù)方案的基礎(chǔ)上,還可以緩存消息命令,以達(dá)到進(jìn)一步減少發(fā)送字節(jié)的目的。圖3為緩存消息命令的流程示意圖,具體包括:301、緩存消息命令的消息內(nèi)容,設(shè)置消息命令與標(biāo)識(shí)的映射關(guān)系;發(fā)送端發(fā)送消息命令時(shí),首先查詢本地緩存。如果消息命令中的消息內(nèi)容沒(méi)有被緩存,則生成一個(gè)ID,并在本地緩存保存此ID和消息命令的映射關(guān)系。同時(shí)設(shè)置緩存標(biāo)志(新值標(biāo)志=1)為false。消息內(nèi)容存儲(chǔ)在緩存執(zhí)行302;消息內(nèi)容不存儲(chǔ)在緩存執(zhí)行303。302、消息內(nèi)容存儲(chǔ)在緩存。消息內(nèi)容已經(jīng)存儲(chǔ)在緩存,則設(shè)置緩存標(biāo)志(新值標(biāo)志=0)為true。依據(jù)消息命令和映射關(guān)系獲取消息命令對(duì)應(yīng)的標(biāo)識(shí),編碼帶有標(biāo)識(shí)的消息命令。303、消息內(nèi)容不存儲(chǔ)在緩存。消息內(nèi)容不存儲(chǔ)在緩存,為消息內(nèi)容對(duì)應(yīng)的消息命令設(shè)置對(duì)應(yīng)的標(biāo)識(shí),編碼帶有標(biāo)識(shí)和消息內(nèi)容的消息命令。通過(guò)字段類型可以確定消息內(nèi)容是否存儲(chǔ)在緩存中。其中,字段類型包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼、內(nèi)嵌命令編碼和緩存內(nèi)嵌命令編碼。在八個(gè)字段類型的基礎(chǔ)上增加了緩存內(nèi)嵌命令編碼。9、緩存內(nèi)嵌命令編碼緩存內(nèi)嵌命令編碼格式:新值標(biāo)志(1字節(jié))+標(biāo)識(shí)(2字節(jié))+緩存內(nèi)嵌命令內(nèi)容。a)[新值標(biāo)志=1]時(shí),表示此消息命令尚未緩存,標(biāo)識(shí)和緩存內(nèi)嵌消息內(nèi)容均非空,新值標(biāo)志即命令唯一ID,緩存內(nèi)嵌消息內(nèi)容即命令內(nèi)容;b)[新值標(biāo)志=0]時(shí),表示此消息命令已經(jīng)緩存,標(biāo)識(shí)即消息命令唯一ID,緩存內(nèi)嵌消息內(nèi)容為空;c)最大可以緩存65536個(gè)字節(jié)。通過(guò)建立消息命令與標(biāo)識(shí)的映射關(guān)系,在相同消息命令第二次發(fā)送時(shí),僅發(fā)送相應(yīng)標(biāo)識(shí)即可,無(wú)需發(fā)送消息命令對(duì)應(yīng)的消息內(nèi)容,從而降低對(duì)網(wǎng)絡(luò)帶寬的占用。參見(jiàn)圖4為本發(fā)明第二實(shí)施例中傳輸數(shù)據(jù)的方法流程示意圖,與實(shí)施例一相對(duì)應(yīng)的,本實(shí)施例應(yīng)用于與數(shù)據(jù)發(fā)送端相對(duì)應(yīng)的數(shù)據(jù)接收端。具體包括:401、通過(guò)握手向下兼容通信協(xié)議版本。數(shù)據(jù)需要從發(fā)送端傳輸至接收端,發(fā)送端可以是客戶端,那么對(duì)應(yīng)接收端可以是服務(wù)器端;發(fā)送端是客戶端,對(duì)應(yīng)接收端還可以是其他客戶端;發(fā)送端是服務(wù)器端,對(duì)應(yīng)接收端可以是服務(wù)器端;發(fā)送端是服務(wù)器端,對(duì)應(yīng)接收端還可以是客戶端。也就是說(shuō),數(shù)據(jù)可以在客戶端之間,服務(wù)器之間,客戶端與服務(wù)器之間任意的傳輸。通過(guò)握手獲知通信協(xié)議版本不同,采用向下兼容的通信協(xié)議版本。即,在協(xié)議雙方開(kāi)始通訊時(shí),首先發(fā)送協(xié)議自協(xié)商報(bào)文,基于配置采取交集和協(xié)議版本向下兼容的原則,通過(guò)一次報(bào)文交換,通信雙方即可完成協(xié)議的自協(xié)商功能,在復(fù)雜的環(huán)境下支持不同版本的并行使用。具體的,通過(guò)握手向下兼容通信協(xié)議版本的過(guò)程可參見(jiàn)1011至1013,在此不再重復(fù)說(shuō)明。402、接收編碼結(jié)果。接收端接收發(fā)送端發(fā)送的編碼結(jié)果。403、依據(jù)通信協(xié)議版本按照字段類型的順序,解碼編碼結(jié)果獲得消息命令。確定通信協(xié)議版本后,在對(duì)編碼結(jié)果解碼時(shí),按照字段類型和字段類型的順序,獲得消息命令。參見(jiàn)表1:字段類型包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼和內(nèi)嵌命令編碼。參見(jiàn)表1:字段類型的順序依次為:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼和內(nèi)嵌命令編碼。每個(gè)字段類型的說(shuō)明參見(jiàn)步驟102。由上述401-403的技術(shù)方案可知,首先通過(guò)握手向下兼容通信協(xié)議版本,這樣就可以在發(fā)送方與接收方的通信協(xié)議版本不一致的情況下傳輸數(shù)據(jù);然后,接收端接收發(fā)送端發(fā)送的編碼結(jié)果。依據(jù)通信協(xié)議版本按照字段類型的順序,解碼編碼結(jié)果獲得消息命令。由于按照字段類型的順序編碼后的結(jié)果所占用的字節(jié)遠(yuǎn)遠(yuǎn)小于現(xiàn)有技術(shù)中采用XML和JSON編碼所占用的字節(jié),因此有效降低了占用網(wǎng)絡(luò)帶寬和CPU資源使用率。此外,在401-403技術(shù)方案的基礎(chǔ)上,還可以緩存消息命令,以達(dá)到進(jìn)一步減少發(fā)送字節(jié)的目的。參見(jiàn)圖5為接收端緩存消息命令的流程示意圖,具體包括:501、消息命令是否存在標(biāo)識(shí)。解碼接收到的編碼結(jié)果得到消息命令,消息命令中存在標(biāo)識(shí),則執(zhí)行502;消息命令中不存在標(biāo)識(shí),則執(zhí)行503。502、依據(jù)標(biāo)識(shí)獲得消息命令對(duì)應(yīng)的消息內(nèi)容。如果消息命令中存在標(biāo)識(shí),則說(shuō)明在接收端已緩存消息命令對(duì)應(yīng)的消息內(nèi)容。根據(jù)標(biāo)識(shí)查詢標(biāo)識(shí)與消息命令的映射關(guān)系,獲得消息命令對(duì)應(yīng)的消息內(nèi)容。503、依據(jù)消息命令獲得消息命令對(duì)應(yīng)的消息內(nèi)容。如果消息命令中不存在標(biāo)識(shí),則解碼編碼結(jié)構(gòu)獲得消息命令對(duì)應(yīng)的消息內(nèi)容。同時(shí),緩存消息命令的消息內(nèi)容,設(shè)置消息命令與標(biāo)識(shí)的映射關(guān)系。通過(guò)字段類型可以確定消息內(nèi)容是否存儲(chǔ)在緩存中。其中,字段類型包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼、內(nèi)嵌命令編碼和緩存內(nèi)嵌命令編碼。在八個(gè)字段類型的基礎(chǔ)上增加了緩存內(nèi)嵌命令編碼。通過(guò)建立消息命令與標(biāo)識(shí)的映射關(guān)系,在相同消息命令第二次接收時(shí),僅接收相應(yīng)標(biāo)識(shí)即可,從而降低對(duì)網(wǎng)絡(luò)帶寬的占用。圖6為本發(fā)明第三實(shí)施例中傳輸數(shù)據(jù)的裝置結(jié)構(gòu)示意圖,實(shí)施例三是與實(shí)施一相對(duì)應(yīng)的裝置,具體包括:協(xié)議自動(dòng)協(xié)商管理器601,用于通過(guò)握手向下兼容通信協(xié)議版本;命令編/解碼器602,用于依據(jù)通信協(xié)議版本按照字段類型的順序,編碼消息命令獲得編碼結(jié)果,發(fā)送編碼結(jié)果。具體的,協(xié)議自動(dòng)協(xié)商管理器601,還用于通過(guò)握手獲知通信協(xié)議版本不同,采用向下兼容的通信協(xié)議版本。字段類型包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼和內(nèi)嵌命令編碼。傳輸數(shù)據(jù)的裝置還包括:消息命令緩存管理器603,用于緩存消息命令的消息內(nèi)容,設(shè)置所述消息命令與所述標(biāo)識(shí)的映射關(guān)系;對(duì)應(yīng)的,命令編/解碼器602,還用于消息內(nèi)容存儲(chǔ)在緩存,依據(jù)消息命令和映射關(guān)系獲取消息命令對(duì)應(yīng)的標(biāo)識(shí),編碼帶有標(biāo)識(shí)的消息命令;消息內(nèi)容不存儲(chǔ)在緩存,為消息命令設(shè)置對(duì)應(yīng)的標(biāo)識(shí),編碼帶有標(biāo)識(shí)和消息內(nèi)容的消息命令。緩存數(shù)據(jù)時(shí),則字段類型包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼、內(nèi)嵌命令編碼和緩存內(nèi)嵌命令編碼。實(shí)施例三提供傳輸數(shù)據(jù)的裝置技術(shù)效果與對(duì)應(yīng)的實(shí)施例一中方法實(shí)施例相同,在此不再贅述。圖7為本發(fā)明第四實(shí)施例中傳輸數(shù)據(jù)的裝置結(jié)構(gòu)示意圖,實(shí)施例四是與實(shí)施二相對(duì)應(yīng)的裝置,具體包括:協(xié)議自動(dòng)協(xié)商管理器701,用于通過(guò)握手向下兼容通信協(xié)議版本;命令編/解碼器702,用于接收編碼結(jié)果,依據(jù)通信協(xié)議版本按照字段類型的順序,解碼編碼結(jié)果獲得消息命令。具體的,協(xié)議自動(dòng)協(xié)商管理器701,還用于通過(guò)握手獲知通信協(xié)議版本不同,采用向下兼容的通信協(xié)議版本。字段類型包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼和內(nèi)嵌命令編碼。傳輸數(shù)據(jù)的裝置還包括:消息命令緩存管理器703,用于緩存消息命令的消息內(nèi)容,設(shè)置所述消息命令與標(biāo)識(shí)的映射關(guān)系;對(duì)應(yīng)的,命令編/解碼器702,還用于消息內(nèi)容存儲(chǔ)在緩存,依據(jù)消息命令獲取消息命令對(duì)應(yīng)的標(biāo)識(shí),再按照標(biāo)識(shí)和映射關(guān)系獲得消息內(nèi)容;消息命令不存在緩存,解碼編碼結(jié)果獲得消息內(nèi)容。所述字段類型包括:字節(jié)順序、消息報(bào)文格式、命令編碼、命令字段編碼、基本類型編碼、字符串編碼、字節(jié)數(shù)組編碼、內(nèi)嵌命令編碼和緩存內(nèi)嵌命令編碼。實(shí)施例四提供的傳輸數(shù)據(jù)的裝置技術(shù)效果與對(duì)應(yīng)的實(shí)施例二中方法實(shí)施例相同,在此不再贅述。參見(jiàn)圖8為發(fā)送端與接收端交互數(shù)據(jù)的結(jié)構(gòu)示意圖,具體包括以下步驟:在進(jìn)行數(shù)據(jù)交互時(shí),首先進(jìn)行通信雙方通信協(xié)議的自動(dòng)協(xié)商:步驟1:當(dāng)消息發(fā)送端向消息接收端發(fā)起連接請(qǐng)求消息時(shí),通過(guò)協(xié)議自動(dòng)協(xié)商管理器601發(fā)送協(xié)議協(xié)商命令給命令編/解碼器602,命令編/解碼器602將協(xié)議協(xié)商命令編碼為字節(jié)數(shù)組并寫入網(wǎng)絡(luò)。步驟2:當(dāng)消息接收端從網(wǎng)絡(luò)讀取該字節(jié)數(shù)組時(shí),命令編/解碼器702將該字節(jié)數(shù)組解碼為協(xié)議協(xié)商命令,通過(guò)協(xié)議自動(dòng)協(xié)商管理器701自動(dòng)進(jìn)行協(xié)商并將協(xié)商結(jié)果發(fā)送給消息發(fā)送端。步驟3:消息發(fā)送端收到協(xié)商結(jié)果后,根據(jù)該協(xié)商結(jié)果設(shè)置自身的通信協(xié)議。當(dāng)消息發(fā)送端設(shè)置完自身的通信協(xié)議后,返回連接成功消息給消息接收端,以便消息發(fā)送端在接收到連接成功消息時(shí)發(fā)起消息業(yè)務(wù)請(qǐng)求。步驟1-步驟3為一次完整的通過(guò)握手確定通信協(xié)議版本的過(guò)程。步驟4:當(dāng)消息發(fā)送端發(fā)送消息命令A(yù)時(shí),通過(guò)消息命令緩存管理器603判斷該消息命令A(yù)的消息內(nèi)容是否存在緩存。若消息命令A(yù)的消息內(nèi)容不存在緩存,則為該消息命令A(yù)設(shè)置一個(gè)唯一ID(一個(gè)自增序號(hào)),并在內(nèi)存中保存ID與消息命令A(yù)的雙向映射關(guān)系。將ID和消息內(nèi)容攜帶在消息命令A(yù)中并發(fā)送給命令編/解碼器602,由命令編/解碼器602將攜帶有ID和消息內(nèi)容的消息命令A(yù)編碼為字節(jié)數(shù)組并寫入網(wǎng)絡(luò)。若消息命令A(yù)的消息內(nèi)容存在緩存,則從緩存中獲取ID,并直接將獲取到的ID發(fā)送給命令編/解碼器602,由命令編/解碼器602將包括ID的消息命令A(yù)編碼為字節(jié)數(shù)組并寫入網(wǎng)絡(luò),無(wú)需將消息命令A(yù)的消息內(nèi)容進(jìn)行網(wǎng)絡(luò)傳輸。其中,命令編/解碼器602編碼內(nèi)預(yù)存消息命令類型與消息通信協(xié)議各字段類型(基本類型或非基本類型)及順序的對(duì)應(yīng)關(guān)系。命令編/解碼器602用于定義消息命令A(yù)的類型(如通過(guò)判斷將該消息命令A(yù)標(biāo)識(shí)為人的信息還是書的信息),并通過(guò)判斷該消息命令A(yù)的類型,確定該消息命令A(yù)按照所對(duì)應(yīng)的消息通信協(xié)議中各字段類型及順序進(jìn)行二進(jìn)制變長(zhǎng)格式的編碼。步驟5:消息接收端從網(wǎng)絡(luò)讀寫字節(jié)數(shù)組,通過(guò)命令編/解碼器702解碼并發(fā)送給消息命令緩存管理器703。命令編/解碼器702通過(guò)讀取字節(jié)數(shù)組中的ID,判斷該ID是否存在緩存。若該ID不存在緩存,即消息內(nèi)容沒(méi)有存儲(chǔ)在緩存,則從發(fā)送端讀取消息命令A(yù)并解碼得到消息命令A(yù)的消息內(nèi)容,并在內(nèi)存中保存消息命令A(yù)的消息內(nèi)容,設(shè)置消息命令A(yù)與ID的映射關(guān)系。其中,命令編/解碼器702依據(jù)通信協(xié)議版本按照字段類型的順序解碼消息命令A(yù)。若ID存在緩存,即消息內(nèi)容存儲(chǔ)在緩存,則在緩存中依據(jù)ID查詢關(guān)聯(lián)的消息命令A(yù),進(jìn)而直接從緩存獲得消息內(nèi)容,無(wú)需從網(wǎng)絡(luò)中解碼以獲得消息內(nèi)容。步驟6:接收端發(fā)送對(duì)應(yīng)于消息命令A(yù)的業(yè)務(wù)處理結(jié)果給消息發(fā)送端。最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使對(duì)應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。當(dāng)前第1頁(yè)1 2 3 
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
光泽县| 锡林郭勒盟| 莎车县| 凤冈县| 尼木县| 安龙县| 沁阳市| 汤原县| 四平市| 常德市| 同仁县| 太康县| 宜城市| 若尔盖县| 康乐县| 临漳县| 威宁| 个旧市| 南郑县| 西昌市| 万州区| 厦门市| 昂仁县| 林周县| 日土县| 肇庆市| 上杭县| 农安县| 阳原县| 彩票| 隆昌县| 麻栗坡县| 安平县| 蒲城县| 鹿邑县| 信丰县| 冀州市| 普格县| 康乐县| 景德镇市| 惠来县|