第一種類型,二進(jìn)制格式的網(wǎng)絡(luò)數(shù)據(jù)包,通常要首先接收包頭,在包頭中有校驗(yàn)數(shù)據(jù)校驗(yàn)獲取的數(shù)據(jù)是否正確,同時(shí)包頭中還有數(shù)據(jù)域存放接下來的內(nèi)容域的大小,得到該大小之后開始接收內(nèi)容包,然后對(duì)內(nèi)容包進(jìn)行解析,包頭的大小是固定的,否則無法知道何時(shí)接收包頭完畢進(jìn)行解析.
第二種類型,XML格式組織的數(shù)據(jù)包,通常以連續(xù)幾個(gè)\r\n之類的字符表示結(jié)束,在接收包的時(shí)候無法知道所要獲取數(shù)據(jù)包的大小,只有每次判斷時(shí)候已經(jīng)接收到了表示結(jié)束的字符.
兩種傳送數(shù)據(jù)包優(yōu)缺點(diǎn)比較:
1)網(wǎng)絡(luò)傳送效率比較:第一種的優(yōu)點(diǎn)是接收數(shù)據(jù)包的效率高,首先按照包頭的數(shù)據(jù)大小接收包頭可以獲知內(nèi)容包的大小,再按照此大小獲取數(shù)據(jù)包;而第二種數(shù)據(jù)包無法在接收的時(shí)候獲取該數(shù)據(jù)包的大小,只能在每次接收的時(shí)候判斷時(shí)候已經(jīng)到達(dá)包的結(jié)尾,因此相比較而言第一種格式的數(shù)據(jù)包在網(wǎng)絡(luò)傳送效率上高一些.同時(shí),由于第一種格式可以在包頭中加入一些校驗(yàn)字段判斷包是否合法,在數(shù)據(jù)校驗(yàn)這一塊也具有優(yōu)勢.
2)解析數(shù)據(jù)包:第一種數(shù)據(jù)包沒有固定的格式,或者準(zhǔn)確的說沒有固定的解析器用于解析這種格式的數(shù)據(jù),因?yàn)槊總€(gè)人定出的協(xié)議都不盡相同;而第二種數(shù)據(jù)包有完備的解析XML格式數(shù)據(jù)的第三方庫可用(libxml2,tinyxml,expat等),但是并不見得有了第三方的庫解析起數(shù)據(jù)起來效率就一定高(這里指的是程序的效率,而不是編碼的效率),因?yàn)閄ML解析比普通的數(shù)據(jù)解析要復(fù)雜的多,效率也就更加慢一些.
3)可擴(kuò)展性:第一種數(shù)據(jù)包的格式不同,可擴(kuò)展性也不盡相同,具體與每種格式的包有區(qū)別.第二種格式的數(shù)據(jù)包由于采用了XML格式,天正的具備很好的可擴(kuò)展性.
4)數(shù)據(jù)安全性:第一種格式的數(shù)據(jù)包可以方便的實(shí)現(xiàn)數(shù)據(jù)的加密,而XML格式的數(shù)據(jù)實(shí)現(xiàn)加密不容易,基本上抓包就能看到數(shù)據(jù).
綜上,個(gè)人認(rèn)為XML格式的數(shù)據(jù)包僅在可擴(kuò)展性上有較大的優(yōu)勢,但是對(duì)于安全性,性能要求不太高而擴(kuò)展性要求較大的協(xié)議還是建議使用XML格式的協(xié)議,畢竟如果協(xié)議制定的不好造成擴(kuò)展性差也是麻煩的事情,因?yàn)榭蛻舳艘坏┓懦鋈ゾ褪詹换貋淼?目前jabber的通訊協(xié)議就是采用的XML格式的協(xié)議.