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