專利名稱:處理消息的方法和系統(tǒng)以及消息發(fā)送端和消息接收端的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,特別涉及一種處理消息的方法和系統(tǒng)以及消息發(fā)送端和消息接收端。
背景技術(shù):
在通信系統(tǒng)中,消息發(fā)送端將發(fā)送的數(shù)據(jù)內(nèi)容以消息的形式發(fā)送出去,消息接收端將收到的消息進(jìn)行解析得到數(shù)據(jù)內(nèi)容,這一過(guò)程為消息的處理過(guò)程。
消息的處理方法大致可以分為兩種基于文本的消息處理和基于二進(jìn)制的消息處理。對(duì)應(yīng)的分別有基于文本的傳輸,比如有可擴(kuò)展標(biāo)記語(yǔ)言(XML,eXtensible Markup Language)格式的傳輸;基于二進(jìn)制傳輸,比如通用對(duì)象請(qǐng)求代理機(jī)構(gòu)(CORBA,Common Object Request Broker Architecture)、組件對(duì)象模型(COM,Component Object Model)、企業(yè)級(jí)Java對(duì)象(EJB,Enterprise Java Beans)等。不管是基于文本還是二進(jìn)制的處理消息的方法,都需要在消息接收端進(jìn)行消息的解析,而消息的解析工具更是數(shù)量繁多,比如,XML的解析工具有文檔對(duì)象模型(DOM,Document Object Model)、XML簡(jiǎn)單訪問(wèn)接口(SAX,Simple API for XML)、Java文檔對(duì)象模型(JDOM,Java Document Object Model)等等。但是現(xiàn)有的方式都有各自的缺點(diǎn),下面對(duì)處理消息過(guò)程中XML解析和二進(jìn)制解析的缺點(diǎn)分別進(jìn)行描述XML處理方式XML本身是一種復(fù)雜的語(yǔ)言,采用XML的格式十分復(fù)雜,因此具有大量的解析工具,所以XML的解析比較復(fù)雜;另外,在采用XML解析時(shí),往往要產(chǎn)生大量的DOM對(duì)象,使得消息處理的過(guò)程性能低下。
二進(jìn)制處理方式基于二進(jìn)制的方式,往往消息的處理過(guò)程取決于操作系統(tǒng)本身,較為復(fù)雜;基于二進(jìn)制的解析都是局限于單一的操作系統(tǒng)平臺(tái)或單一的編程語(yǔ)言,對(duì)于異構(gòu)系統(tǒng)、多種編程語(yǔ)言無(wú)法很好的支持,例如,使用C語(yǔ)言編程的二進(jìn)制格式,也必須采用相同的編程語(yǔ)言才能夠解析;同樣地,在一種操作系統(tǒng)下編程的二進(jìn)制格式,也必須在相同的操作系統(tǒng)下才能夠解析。所以,二進(jìn)制的處理方式不能跨平臺(tái)或跨編程語(yǔ)言。
在分布式應(yīng)用系統(tǒng)當(dāng)中,實(shí)時(shí)的數(shù)據(jù)通信和訪問(wèn)是協(xié)同工作的核心,那么對(duì)消息的處理就顯得十分重要。但是現(xiàn)有的消息的處理方法并不能簡(jiǎn)單、且跨平臺(tái)跨編程語(yǔ)言的完成消息的處理。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實(shí)施例的第一個(gè)目的在于提供一種處理消息的方法,以便于能夠簡(jiǎn)單、且跨平臺(tái)跨編程語(yǔ)言的完成消息的處理。
本發(fā)明實(shí)施例的第二個(gè)目的在于提供一種處理消息的系統(tǒng),以便于能夠簡(jiǎn)單、且跨平臺(tái)跨編程語(yǔ)言的完成消息的處理。
本發(fā)明實(shí)施例的第三個(gè)目的在于提供一種消息發(fā)送端,以便于能夠簡(jiǎn)單、且跨平臺(tái)跨編程語(yǔ)言的完成消息的處理。
本發(fā)明實(shí)施例的第四個(gè)目的在于提供一種消息接收端,以便于能夠簡(jiǎn)單、且跨平臺(tái)跨編程語(yǔ)言的完成消息的處理。
為了實(shí)現(xiàn)上述第一個(gè)目的,本發(fā)明實(shí)施例提供了一種處理消息的方法,將消息進(jìn)行封裝得到消息對(duì)象,使用標(biāo)識(shí)Token的形式對(duì)封裝后得到的消息對(duì)象進(jìn)行描述,根據(jù)描述信息對(duì)具體消息對(duì)象進(jìn)行編碼發(fā)送;和/或根據(jù)描述信息將接收到的編碼后的消息解析為具體消息對(duì)象。
為了實(shí)現(xiàn)上述第二個(gè)目的,本發(fā)明實(shí)施例提供了一種處理消息的系統(tǒng),該系統(tǒng)包括描述信息生成模塊、消息發(fā)送端、以及消息接收端;描述信息生成模塊,將消息進(jìn)行封裝,使用Token的形式到的消息對(duì)象進(jìn)行描述,生成描述信息通知給消息發(fā)送端和消息接收端;
消息發(fā)送端,根據(jù)該描述信息對(duì)具體消息對(duì)象進(jìn)行編碼后,將編碼后的消息發(fā)送給消息接收端;消息接收端,根據(jù)描述信息將接收到的編碼后的消息解析為具體消息對(duì)象。
為了實(shí)現(xiàn)上述第三個(gè)目的,本發(fā)明實(shí)施例提供了一種消息發(fā)送端,該消息發(fā)送端包括編碼單元和收發(fā)單元;所述收發(fā)單元,將收到的描述信息發(fā)送給編碼單元;接收編碼單元發(fā)送的編碼后的消息,并發(fā)送出去;所述編碼單元,根據(jù)編碼單元發(fā)送的描述信息對(duì)具體消息對(duì)象進(jìn)行編碼,并將編碼后的消息發(fā)送給收發(fā)單元。
為了實(shí)現(xiàn)上述第四個(gè)目的,本發(fā)明實(shí)施例提供了一種消息接收端,該消息接收端包括收發(fā)單元和解析單元;所述收發(fā)單元,接收描述信息和編碼后的消息,并發(fā)送給解析單元;所述解析單元,根據(jù)接收到的描述信息將接收到的編碼后的消息解析為具體消息對(duì)象。
由以上技術(shù)方案可以看出,本發(fā)明實(shí)施例采用Token的形式對(duì)消息對(duì)象進(jìn)行描述和解析,描述信息格式簡(jiǎn)單,也不需要復(fù)雜的解析工具,使得消息的處理變得簡(jiǎn)單容易,并且基于Token的處理過(guò)程并不同于二進(jìn)制模式,適合于不同操作系統(tǒng)和不同的編程語(yǔ)言環(huán)境下的消息處理,所以實(shí)現(xiàn)了消息處理的跨平臺(tái)和跨語(yǔ)言。
圖1為本發(fā)明實(shí)施例提供的處理消息的方法示意圖;圖2為本發(fā)明實(shí)施例提供的解析過(guò)程流程圖;圖3.1為本發(fā)明實(shí)施例提供的一種處理消息的系統(tǒng)結(jié)構(gòu)示意圖;圖3.2為本發(fā)明實(shí)施例提供的描述信息生成模塊設(shè)置在消息發(fā)送端中的系統(tǒng)結(jié)構(gòu)示意圖;圖3.3為本發(fā)明實(shí)施例提供的描述信息生成模塊設(shè)置在消息接收端中的系統(tǒng)結(jié)構(gòu)示意圖。
圖4為本發(fā)明實(shí)施例提供的消息發(fā)送端的組成結(jié)構(gòu)圖;圖5為本發(fā)明實(shí)施例提供的消息接收端的組成結(jié)構(gòu)圖。
具體實(shí)施例方式
為了使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合具體實(shí)施例進(jìn)行詳細(xì)說(shuō)明。
本發(fā)明實(shí)施例所提供的方法主要是將消息進(jìn)行封裝得到消息對(duì)象,使用Token對(duì)封裝后得到的消息對(duì)象進(jìn)行描述;根據(jù)該描述信息對(duì)具體消息對(duì)象進(jìn)行編碼后發(fā)送;和/或根據(jù)描述信息將接收到的編碼后的消息解析為具體消息對(duì)象。
其中,所述根據(jù)該描述信息對(duì)具體消息對(duì)象進(jìn)行編碼后發(fā)送由消息發(fā)送端執(zhí)行,所述根據(jù)描述信息將接收到的編碼后的消息解析為具體消息對(duì)象由消息接收端執(zhí)行;消息發(fā)送端和消息接收端可以在同構(gòu)系統(tǒng)上,例如,兩臺(tái)電腦之間消息的傳輸;也可以在異構(gòu)系統(tǒng)上,如,手機(jī)將消息發(fā)送給服務(wù)器,使用不同操作系統(tǒng)的兩臺(tái)電腦之間消息的傳輸,或者使用不同網(wǎng)絡(luò)協(xié)議的設(shè)備之間消息的傳輸?shù)取?br>
所述描述信息可以是消息發(fā)送端和消息接收端預(yù)先約定的;也可以是消息發(fā)送端在發(fā)送具體消息對(duì)象編碼后的消息之前,發(fā)送給消息接收端的;也可以是在消息發(fā)送端對(duì)消息對(duì)象進(jìn)行編碼之前,消息接收端發(fā)送給消息發(fā)送端的,然后消息發(fā)送端根據(jù)該描述信息對(duì)消息對(duì)象進(jìn)行編碼。
消息發(fā)送端和消息接收端之間對(duì)編碼后的消息可以是通過(guò)網(wǎng)絡(luò)進(jìn)行傳輸?shù)摹?br>
下面對(duì)該方法進(jìn)行詳細(xì)的描述,如圖1所示,圖1為本發(fā)明實(shí)施例提供的處理消息的方法示意圖。該方法主要包括以下步驟步驟101將消息進(jìn)行封裝,得到消息對(duì)象。
為了編程和維護(hù)的方便,消息往往在程序里要進(jìn)行封裝,將該消息封裝為一個(gè)類,例如,在面向?qū)ο笳Z(yǔ)言中的類(Class);或?qū)⒃撓⒎庋b為結(jié)構(gòu)體,例如,在面向過(guò)程語(yǔ)言中的結(jié)構(gòu)體(Struct)。在此,將封裝后的類或結(jié)構(gòu)體統(tǒng)稱為消息對(duì)象。
下面是以Java語(yǔ)言為例的一個(gè)消息對(duì)象SomeMessageObject,該消息對(duì)象中包含屬性id和namepublic class SomeMessageObject{private String id;private String name;//setters and getters}步驟102對(duì)該消息對(duì)象基于Token進(jìn)行描述,得到描述信息(TokenInfo)。
本發(fā)明實(shí)施例要完成消息對(duì)象的傳遞和訪問(wèn),那么就需要對(duì)消息對(duì)象進(jìn)行恰當(dāng)?shù)拿枋?,以便在消息發(fā)送端和消息接收端達(dá)成一個(gè)雙方都能互操作的協(xié)議。在本發(fā)明實(shí)施例中采用Token來(lái)描述消息對(duì)象以便于達(dá)成消息發(fā)送端和消息接收端的協(xié)議。
Token是指消息的標(biāo)識(shí)。本步驟中所述基于Token進(jìn)行描述是將消息對(duì)象中的每一個(gè)屬性、以及每一個(gè)屬性中可能包含的分支屬性都可以用Token的形式進(jìn)行描述,描述后得到的信息在此稱為TokenInfo。該消息對(duì)象的描述信息TokenInfo用來(lái)做為步驟103中進(jìn)行編碼的依據(jù)。
對(duì)消息對(duì)象進(jìn)行描述形成TokenInfo包括以下幾方面1)描述消息對(duì)象中數(shù)據(jù)的類型,例如字符串(String)、整數(shù)(Integer)、數(shù)組(Array)等;以及它們的順序。
2)描述消息對(duì)象中數(shù)據(jù)類型所對(duì)應(yīng)的長(zhǎng)度。由于平臺(tái)上的差異性,有些數(shù)據(jù)類型,例如Integer,可能長(zhǎng)度不一致,所以要對(duì)消息對(duì)象中數(shù)據(jù)長(zhǎng)度進(jìn)行描述;如果為空,表示為String類型。該數(shù)據(jù)類型所對(duì)應(yīng)的長(zhǎng)度的描述需要和1)中描述的數(shù)據(jù)類型一一對(duì)應(yīng)。
3)描述消息類別。網(wǎng)絡(luò)中傳輸?shù)南⒍喾N多樣,那么就需要用一個(gè)類別或者一個(gè)標(biāo)識(shí)(ID)來(lái)區(qū)分不同的消息,以免發(fā)生傳輸或者解析的錯(cuò)誤。
4)描述消息對(duì)象名,也就是對(duì)上面例子中的.class進(jìn)行描述。該對(duì)象就是下面步驟中所述TokenMessage解析后獲得的消息對(duì)象。
5)描述消息對(duì)象中對(duì)象的屬性。對(duì)該屬性進(jìn)行描述時(shí),需要和1)中描述的數(shù)據(jù)類型一一對(duì)應(yīng)。
上述對(duì)消息對(duì)象進(jìn)行描述的5個(gè)方面的描述順序可以發(fā)生變化,也可以除了這5個(gè)方面的Token以外還有其它擴(kuò)展的Token。
下面還針對(duì)上面有id和name屬性的消息為例,對(duì)上述5個(gè)方面進(jìn)行說(shuō)明1)該消息對(duì)象中數(shù)據(jù)類型的Token可以描述為splitCodes:{“int”,“string”};2)該消息對(duì)象中數(shù)據(jù)類型所對(duì)應(yīng)的長(zhǎng)度的Token可以描述為splitTargetLength:{4,,};此處,4與上述int類型相對(duì)應(yīng),空與上述string類型相對(duì)應(yīng)。
3)消息類別可以描述為msgType:{“MsgType_1000001”};4)消息對(duì)象名可以描述為className{“SomeMessageObject.class”};如果該描述消息的被通知方采用的編程語(yǔ)言是Java,則該消息對(duì)象名可以為“SomeMessageObject.class”,如果該描述消息的被通知方采用的編程語(yǔ)言是C語(yǔ)言,則該消息對(duì)象名可以為“SomeMessageObject”。例如如果該消息對(duì)象的被通知方為消息接收端,消息接收端采用Java為編程語(yǔ)言,那么該消息對(duì)象名為SomeMessageObject.class。
5)消息對(duì)象中對(duì)象的屬性可以描述為objAttributeNames:{“id”,“name”}此處,id與int類型相對(duì)應(yīng),name與string相對(duì)應(yīng)。
下面舉一個(gè)完整的TokenInfo示例,以方便對(duì)上述TokenInfo的理解和說(shuō)明Define Token TokenInfo{/**分隔符,可支持多種語(yǔ)言數(shù)據(jù)類型*/splitCodes:{“int”,“int”,“\\0”,“string”,“\\0”,“l(fā)ong”,“int”,“date_yyyy-mm-dd”,“\\0”,“string”,“\\0”,“int”,“byte”,“array:{“int”,“string”}”,“int”};/**每個(gè)分隔符中間的數(shù)據(jù)長(zhǎng)度*/splitTargetLength:{4,4,0,,0,16,4,8,0,,0,4,2,2,4,,4};/**消息類別*/msgType:{“MSG_TYPE”};/**消息對(duì)象對(duì)應(yīng)的對(duì)象類名*/className{“SomeMessageObject.class”};/**消息對(duì)象里數(shù)據(jù)對(duì)應(yīng)的對(duì)象的屬性,與數(shù)據(jù)類型和數(shù)據(jù)長(zhǎng)度的順序一致*/objAttributeNames:{“Attribute1”,“Attribute2”,“Attribute3”,“Attribute4”,“Attribute5”,“Attribute6”,......,“AttributeN”};/**其它擴(kuò)展Token*/}步驟101和102中所述的封裝和描述過(guò)程可以是消息發(fā)送端完成的,也可以是消息接收端完成的,或者也可以是其它裝置完成的;但是所得到的TokenInfo必須通知給消息發(fā)送端和消息接收端。
在對(duì)消息對(duì)象進(jìn)行描述時(shí),要發(fā)送給消息發(fā)送端的TokenInfo要采用消息發(fā)送端的編程語(yǔ)言進(jìn)行描述;要發(fā)送給消息接收端的TokenInfo要采用消息接收端的編程語(yǔ)言進(jìn)行描述;這樣就使得消息發(fā)送端可以根據(jù)該TokenInfo對(duì)具體消息對(duì)象進(jìn)行編碼,消息接收端根據(jù)該TokenInfo對(duì)編碼后的消息進(jìn)行解析。
步驟103消息發(fā)送端根據(jù)該TokenInfo對(duì)具體消息對(duì)象進(jìn)行編碼,得到編碼后的消息(TokenMessage)。
步驟102中使用Token對(duì)消息對(duì)象進(jìn)行描述就構(gòu)成了TokenInfo,在本步驟中,消息發(fā)送端依據(jù)該TokenInfo將具體消息對(duì)象的每一個(gè)屬性編碼為一定長(zhǎng)度的字符段。每一個(gè)字符段對(duì)應(yīng)一個(gè)具體消息對(duì)象的屬性。例如一個(gè)id為1001,name為張三的消息對(duì)象,該消息對(duì)象就為一個(gè)具體消息對(duì)象,編碼后的消息為xxx1001yyy張三zzz。其中,該TokenMessage包含五個(gè)字符段,其中,1001對(duì)應(yīng)著消息對(duì)象中的id屬性,張三對(duì)應(yīng)著消息對(duì)象中的name屬性;xxx、yyy和zzz可以是分隔符,也可以是各屬性的標(biāo)識(shí),在具體編碼時(shí)并不局限于xxx、yyy、以及zzz的形式,可以采用別的可以用來(lái)對(duì)屬性進(jìn)行分隔或標(biāo)識(shí)的形式,例如~~~1001~~~張三~~~等形式。
通過(guò)使用Token對(duì)消息對(duì)象進(jìn)行描述,使得消息編碼方式完整、準(zhǔn)確和密集,可以很大程度上提高解析的準(zhǔn)確性,降低網(wǎng)絡(luò)帶寬,提高網(wǎng)絡(luò)傳輸效率。
步驟104消息發(fā)送端將該TokenMessage發(fā)送出去。
步驟105消息接收端接收該TokenMessage。
步驟106消息接收端根據(jù)描述信息將該TokenMessage進(jìn)行解析得到具體消息對(duì)象。
消息接收端接收到一個(gè)TokenMessage后,只要有其對(duì)應(yīng)的TokenInfo,就可以對(duì)其進(jìn)行解析。具體解析的過(guò)程如圖2所示,該解析過(guò)程可以包括以下步驟
步驟201解析TokenMessage中的關(guān)鍵字符段,構(gòu)造出一個(gè)消息對(duì)象。
本步驟中所述關(guān)鍵字符段是指TokenMessage中的消息頭部分,可以是消息類別、消息對(duì)象中的對(duì)象等。在上述的例子中,關(guān)鍵字符段可以是MsgType_1000001、SomeMessageObject中對(duì)應(yīng)的部分。消息接收端可以根據(jù)TokenInfo和編碼后消息的標(biāo)識(shí)將所述關(guān)鍵字符段進(jìn)行解析,構(gòu)造出一個(gè)消息對(duì)象。
步驟202根據(jù)TokenInfo對(duì)剩余的字符段依次進(jìn)行遍歷,轉(zhuǎn)換為當(dāng)前系統(tǒng)內(nèi)部的數(shù)據(jù)。
TokenMessage中每一個(gè)字符段都有相應(yīng)的Token與之對(duì)應(yīng),根據(jù)TokenInfo的描述,將相應(yīng)的字符段轉(zhuǎn)換為當(dāng)前系統(tǒng)內(nèi)部的數(shù)據(jù)。
步驟203將遍歷過(guò)程中獲得的數(shù)據(jù)與構(gòu)造的消息對(duì)象相匹配,獲得最終的具體消息對(duì)象。
例如,一個(gè)是張三,數(shù)據(jù)類型為string的數(shù)據(jù)并且在AbjAttributeNames中的屬性為name時(shí),肯定和消息對(duì)象中的name屬性相匹配。
從以上步驟可以看出,對(duì)編碼后的消息進(jìn)行解析的過(guò)程就是一個(gè)對(duì)TokenMessage和TokenInfo做同步遍歷的過(guò)程。因?yàn)樵诒景l(fā)明實(shí)施例中,TokenInfo是對(duì)消息對(duì)象準(zhǔn)確描述的信息,所以,只需一次遍歷就可以產(chǎn)生一個(gè)具體消息對(duì)象,并且不取決于系統(tǒng)本身和解析工具,使得處理消息的過(guò)程變得更加簡(jiǎn)單。
下面,對(duì)本發(fā)明實(shí)施例所提供的系統(tǒng)進(jìn)行詳細(xì)描述。如圖3.1所示,該系統(tǒng)主要包括描述信息生成模塊300、消息發(fā)送端310、以及消息接收端320。
描述信息生成模塊300,將消息進(jìn)行封裝,使用Token對(duì)封裝后得到的消息對(duì)象進(jìn)行描述,生成TokenInfo發(fā)送給消息發(fā)送端310和消息接收端320。
為了編程和維護(hù)的方便,描述信息生成模塊300將消息封裝為一個(gè)類,例如,在面向?qū)ο笳Z(yǔ)言中的Class;或?qū)⒃撓⒎庋b為結(jié)構(gòu)體,例如,在面向過(guò)程語(yǔ)言中的Struct。在此,將封裝后的類或結(jié)構(gòu)體統(tǒng)稱為消息對(duì)象。
所述描述信息生成模塊300將封裝后得到的消息對(duì)象中每一個(gè)屬性、以及屬性的屬性都用Token的形式進(jìn)行描述,描述后得到的信息為TokenInfo,該TokenInfo為消息發(fā)送端310對(duì)具體消息對(duì)象進(jìn)行編碼的依據(jù),也是接受方320對(duì)編碼后的消息進(jìn)行解碼的依據(jù)。描述信息生成模塊300可以對(duì)消息對(duì)象中數(shù)據(jù)的類型、消息對(duì)象中數(shù)據(jù)類型的長(zhǎng)度、消息類別、消息對(duì)象名、消息對(duì)象中對(duì)象的屬性等進(jìn)行描述。
在對(duì)消息對(duì)象進(jìn)行描述時(shí),要發(fā)送給消息發(fā)送端的TokenInfo要采用消息發(fā)送端的編程語(yǔ)言進(jìn)行描述;要發(fā)送給消息接收端的TokenInfo要采用消息接收端的編程語(yǔ)言進(jìn)行描述;這樣就使得消息發(fā)送端可以根據(jù)該TokenInfo對(duì)具體消息對(duì)象進(jìn)行編碼,消息接收端根據(jù)該TokenInfo對(duì)編碼后的消息進(jìn)行解析,實(shí)現(xiàn)消息處理的跨語(yǔ)言。
消息發(fā)送端310,根據(jù)該TokenInfo對(duì)具體消息對(duì)象進(jìn)行編碼后,將編碼后生成的TokenMessage發(fā)送給消息接收端320。
所述消息發(fā)送端310可以是計(jì)算機(jī)、手機(jī)、工作站、服務(wù)器、處理系統(tǒng)、應(yīng)用系統(tǒng)等。
所述消息發(fā)送端310,依據(jù)TokenInfo將消息對(duì)象的每一個(gè)屬性編碼為一定長(zhǎng)度的字符段。每一個(gè)字符段對(duì)應(yīng)一個(gè)消息對(duì)象的屬性。
消息接收端320,根據(jù)TokenInfo將接收到的TokenMessage解析為具體消息對(duì)象。
所述消息接收端320可以是計(jì)算機(jī)、手機(jī)、工作站、服務(wù)器、處理系統(tǒng)、應(yīng)用系統(tǒng)等。
所述消息接收端320首先解析TokenMessage中的關(guān)鍵字符段,構(gòu)造出一個(gè)消息對(duì)象,然后根據(jù)TokenInfo對(duì)剩余字符段依次進(jìn)行遍歷,轉(zhuǎn)換為當(dāng)前系統(tǒng)內(nèi)部的數(shù)據(jù),并將遍歷過(guò)程中獲得的數(shù)據(jù)與構(gòu)造的消息對(duì)象相匹配,獲得最終的具體消息對(duì)象。
其中,所述描述信息生成模塊300可以是獨(dú)立的裝置,生成TokenInfo后,將TokenInfo在消息發(fā)送端進(jìn)行編碼之前發(fā)送給消息發(fā)送端,在消息接收端進(jìn)行解碼之前發(fā)送給消息接收端。其中,TokenInfo可以通過(guò)復(fù)制或者網(wǎng)絡(luò)傳輸發(fā)送給消息發(fā)送端或者消息接收端。
所述描述信息生成模塊300也可以設(shè)置在消息發(fā)送端310中,如圖3.2所示,消息發(fā)送端310根據(jù)自身描述信息生成模塊300生成的TokenInfo對(duì)具體消息對(duì)象進(jìn)行編碼得到TokenMessage,并將其發(fā)送給消息接收端320;描述信息生成模塊300將TokenInfo發(fā)送給消息接收端320,消息接收端320根據(jù)該TokenInfo對(duì)編碼后得到的TokenMessage進(jìn)行解析。
所述描述信息生成模塊300也可以設(shè)置在消息接收端320中,如圖3.3所示,消息接收端320中的描述信息生成模塊300將生成的TokenInfo發(fā)送給消息發(fā)送端310,消息發(fā)送端310根據(jù)該TokenInfo對(duì)具體消息對(duì)象進(jìn)行編碼得到TokenMessage,將其發(fā)送給消息接收端320,消息接收端320根據(jù)TokenInfo將接收到的TokenMessage進(jìn)行解析。
下面對(duì)消息接收端和消息發(fā)送端的結(jié)構(gòu)進(jìn)行詳細(xì)描述。消息發(fā)送端的結(jié)構(gòu)如圖4所示。該消息發(fā)送端包括編碼單元401和收發(fā)單元402;所述收發(fā)單元402,將接收到的描述信息發(fā)送給編碼單元401;接收編碼單元發(fā)送的編碼后的消息,并發(fā)送出去;所述編碼單元401,根據(jù)收發(fā)單元發(fā)送的描述信息對(duì)具體消息對(duì)象進(jìn)行編碼,并將編碼后的消息發(fā)送給收發(fā)單元402。
更進(jìn)一步地,該消息發(fā)送端進(jìn)一步包括描述信息生成單元403,用于將消息進(jìn)行封裝,使用Token的形式對(duì)封裝后得到的消息對(duì)象進(jìn)行描述,然后發(fā)送給收發(fā)單元402和/或消息接收端。
消息接收端地結(jié)構(gòu)如圖5所示,該消息接收端包括收發(fā)單元501和解析單元502;所述收發(fā)單元501,接收描述信息和編碼后的消息,并發(fā)送給解析單元502;所述解析單元502,根據(jù)接收到的描述信息將接收到的編碼后的消息解析為具體消息對(duì)象。
更進(jìn)一步地,該消息接收端進(jìn)一步包括描述信息生成單元503,用于將消息進(jìn)行封裝,使用Token的形式對(duì)封裝后得到的消息對(duì)象進(jìn)行描述,然后發(fā)送給收發(fā)單元501;所述收發(fā)單元501還用于,將所述描述信息發(fā)送給消息發(fā)送端。
由以上描述可以看出,本發(fā)明實(shí)施例使用Token對(duì)消息對(duì)象進(jìn)行描述得到TokenInfo,消息發(fā)送端根據(jù)該TokenInfo對(duì)具體消息對(duì)象進(jìn)行編碼,消息接收端根據(jù)該TokenInfo進(jìn)行解析得具體消息對(duì)象。使用Token的形式對(duì)消息對(duì)象進(jìn)行描述的格式簡(jiǎn)單,不需要復(fù)雜的解析工具,且消息接收端只需要一次遍歷就可以產(chǎn)生一個(gè)具體消息對(duì)象,使得消息的處理變得簡(jiǎn)單容易;并且,基于Token的處理過(guò)程并不同于二進(jìn)制模式,適合于不同操作系統(tǒng)和不同的編程語(yǔ)言環(huán)境下的消息處理,所以實(shí)現(xiàn)了消息處理的跨平臺(tái)和跨語(yǔ)言。
更進(jìn)一步地,通過(guò)使用Token對(duì)消息對(duì)象進(jìn)行描述,并根據(jù)該描述信息對(duì)具體消息對(duì)象進(jìn)行編碼,使得編碼方式完整、準(zhǔn)確和密集,提高了解析的準(zhǔn)確性,降低網(wǎng)絡(luò)帶寬,提高網(wǎng)絡(luò)傳輸效率。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明精神和原則范圍之內(nèi)所做的任何修改、等同替換和改進(jìn)等,都應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種處理消息的方法,其特征在于,該方法包括將消息進(jìn)行封裝得到消息對(duì)象,使用標(biāo)識(shí)Token的形式對(duì)封裝后得到的所述消息對(duì)象進(jìn)行描述;根據(jù)描述信息對(duì)具體消息對(duì)象進(jìn)行編碼后發(fā)送,和/或根據(jù)描述信息將接收到的編碼后的消息解析為具體消息對(duì)象。
2.根據(jù)權(quán)利要求1所述的處理消息的方法,其特征在于,所述將消息進(jìn)行封裝為將消息封裝為一個(gè)類,所述消息對(duì)象為封裝后的類;或者所述將消息進(jìn)行封裝為將消息封裝為一個(gè)結(jié)構(gòu)體,所述消息對(duì)象為封裝后的結(jié)構(gòu)體。
3.根據(jù)權(quán)利要求1所述的處理消息的方法,其特征在于,使用Token的形式對(duì)封裝后得到的所述消息對(duì)象進(jìn)行描述包括以Token的形式描述消息對(duì)象中數(shù)據(jù)的類型、消息對(duì)象中數(shù)據(jù)類型所對(duì)應(yīng)的長(zhǎng)度、消息類別、消息對(duì)象名、以及消息對(duì)象中對(duì)象的屬性。
4.根據(jù)權(quán)利要求1、2或3所述的處理消息的方法,其特征在于,所述使用Token的形式對(duì)封裝后得到的消息對(duì)象進(jìn)行描述是由消息發(fā)送端執(zhí)行的、或由消息接收端執(zhí)行的、或由獨(dú)立的設(shè)備完成的。
5.根據(jù)權(quán)利要求3所述的處理消息的方法,其特征在于,所述編碼為根據(jù)所述描述信息將每一個(gè)具體消息對(duì)象的屬性編碼為字符段,每一個(gè)字符段對(duì)應(yīng)一個(gè)具體消息對(duì)象的屬性。
6.根據(jù)權(quán)利要求5所述的處理消息的方法,其特征在于,所述解析包括解析編碼后消息中的關(guān)鍵字符段,構(gòu)造出一個(gè)消息對(duì)象;根據(jù)描述信息對(duì)剩余的字符段依次進(jìn)行遍歷,轉(zhuǎn)換為消息接收端系統(tǒng)內(nèi)部的數(shù)據(jù);將遍歷過(guò)程中獲得的數(shù)據(jù)與構(gòu)造的消息對(duì)象相匹配,獲得最終的具體消息對(duì)象。
7.根據(jù)權(quán)利要求6所述的處理消息的方法,其特征在于,所述關(guān)鍵字符段為編碼后的消息中消息類別和消息對(duì)象名所對(duì)應(yīng)的字符段。
8.一種處理消息的系統(tǒng),其特征在于,該系統(tǒng)包括描述信息生成模塊、消息發(fā)送端、以及消息接收端;描述信息生成模塊,將消息進(jìn)行封裝,使用Token的形式對(duì)封裝后得到的消息對(duì)象進(jìn)行描述,生成描述信息通知給消息發(fā)送端和消息接收端;消息發(fā)送端,根據(jù)該描述信息對(duì)具體消息對(duì)象進(jìn)行編碼后,將編碼后的消息發(fā)送給消息接收端;消息接收端,根據(jù)描述信息將接收到的編碼后的消息解析為具體消息對(duì)象。
9.根據(jù)權(quán)利要求8所述的處理消息的系統(tǒng),其特征在于,描述信息生成模塊為獨(dú)立的設(shè)備、或者設(shè)置在消息發(fā)送端中、或者設(shè)置在消息接收端中。
10.一種消息發(fā)送端,其特征在于,該消息發(fā)送端包括編碼單元和收發(fā)單元;所述收發(fā)單元,將接收到的描述信息發(fā)送給編碼單元;接收編碼單元發(fā)送的編碼后的消息,并發(fā)送出去;所述編碼單元,根據(jù)收發(fā)單元發(fā)送的描述信息對(duì)具體消息對(duì)象進(jìn)行編碼,并將編碼后的消息發(fā)送給收發(fā)單元。
11.根據(jù)權(quán)利要求10所述的消息發(fā)送端,其特征在于,該消息發(fā)送端進(jìn)一步包括描述信息生成單元,用于將消息進(jìn)行封裝,使用Token的形式對(duì)封裝后得到的消息對(duì)象進(jìn)行描述,然后發(fā)送給收發(fā)單元和/或消息接收端。
12.一種消息接收端,其特征在于,該消息接收端包括收發(fā)單元和解析單元;所述收發(fā)單元,接收描述信息和編碼后的消息,并發(fā)送給解析單元;所述解析單元,根據(jù)接收到的描述信息將接收到的編碼后的消息解析為具體消息對(duì)象。
13.根據(jù)權(quán)利要求12所述的消息接收端,其特征在于,所述消息接收端進(jìn)一步包括描述信息生成單元,用于將消息進(jìn)行封裝,使用Token的形式對(duì)封裝后得到的消息對(duì)象進(jìn)行描述,然后發(fā)送給收發(fā)單元;所述收發(fā)單元還用于,將所述描述信息發(fā)送給消息發(fā)送端。
全文摘要
本發(fā)明提供了一種處理消息的方法和系統(tǒng),將消息進(jìn)行封裝,使用標(biāo)識(shí)(Token)對(duì)封裝后得到的消息對(duì)象進(jìn)行描述,根據(jù)該描述信息對(duì)具體消息對(duì)象進(jìn)行編碼后,發(fā)送出去;和/或根據(jù)描述信息將接收到的編碼后的消息解析為具體消息對(duì)象。使用Token的形式對(duì)消息對(duì)象進(jìn)行描述的格式簡(jiǎn)單,不需要復(fù)雜的解析工具,且消息接收端只需要一次遍歷就可以產(chǎn)生一個(gè)具體消息對(duì)象,使得消息的處理變得簡(jiǎn)單,且基于Token的處理過(guò)程實(shí)現(xiàn)了消息處理的跨平臺(tái)和跨語(yǔ)言。
文檔編號(hào)H04L29/06GK101026438SQ20071000353
公開(kāi)日2007年8月29日 申請(qǐng)日期2007年2月6日 優(yōu)先權(quán)日2007年2月6日
發(fā)明者葛曉磊 申請(qǐng)人:華為技術(shù)有限公司