那谁的技术博客

感兴趣领域:高性能服务器编程,存储,算法,Linux内核
随笔 - 210, 文章 - 0, 评论 - 1183, 引用 - 0
数据加载中……

两种网络数据格式的比较

第一种类型,二进制格式的网络数据包,通常要首先接收包头,在包头中有校验数据校验获取的数据是否正确,同时包头中还有数据域存放接下来的内容域的大小,得到该大小之后开始接收内容包,然后对内容包进行解析,包头的大小是固定的,否则无法知道何时接收包头完毕进行解析.

第二种类型,XML格式组织的数据包,通常以连续几个\r\n之类的字符表示结束,在接收包的时候无法知道所要获取数据包的大小,只有每次判断时候已经接收到了表示结束的字符.

两种传送数据包优缺点比较:
1)网络传送效率比较:第一种的优点是接收数据包的效率高,首先按照包头的数据大小接收包头可以获知内容包的大小,再按照此大小获取数据包;而第二种数据包无法在接收的时候获取该数据包的大小,只能在每次接收的时候判断时候已经到达包的结尾,因此相比较而言第一种格式的数据包在网络传送效率上高一些.同时,由于第一种格式可以在包头中加入一些校验字段判断包是否合法,在数据校验这一块也具有优势.

2)解析数据包:第一种数据包没有固定的格式,或者准确的说没有固定的解析器用于解析这种格式的数据,因为每个人定出的协议都不尽相同;而第二种数据包有完备的解析XML格式数据的第三方库可用(libxml2,tinyxml,expat等),但是并不见得有了第三方的库解析起数据起来效率就一定高(这里指的是程序的效率,而不是编码的效率),因为XML解析比普通的数据解析要复杂的多,效率也就更加慢一些.

3)可扩展性:第一种数据包的格式不同,可扩展性也不尽相同,具体与每种格式的包有区别.第二种格式的数据包由于采用了XML格式,天正的具备很好的可扩展性.

4)数据安全性:第一种格式的数据包可以方便的实现数据的加密,而XML格式的数据实现加密不容易,基本上抓包就能看到数据.

综上,个人认为XML格式的数据包仅在可扩展性上有较大的优势,但是对于安全性,性能要求不太高而扩展性要求较大的协议还是建议使用XML格式的协议,毕竟如果协议制定的不好造成扩展性差也是麻烦的事情,因为客户端一旦放出去就收不回来的.目前jabber的通讯协议就是采用的XML格式的协议.


posted on 2008-03-26 23:13 那谁 阅读(5288) 评论(7)  编辑 收藏 引用 所属分类: 网络编程服务器设计

评论

# re: 两种网络数据格式的比较  回复  更多评论   

楼主总结的很不错。

安全性方面,我感觉两者差别不是很大。

使用方面,我更多是使用XML格式的,可能和个人的协议设计能力有关吧:)
2008-04-21 23:59 | perddy

# re: 两种网络数据格式的比较  回复  更多评论   

XML格式 无论是解析还是打包还是协议定制都比二进制格式复杂多了,如果不可考虑跨平台和跨语言,用XML格式是自残
2008-05-04 13:29 | 过客

# re: 两种网络数据格式的比较  回复  更多评论   

xml分析慢,传送量大........
二进制的效率等各个方面,就要看设计的人的水平了.
个人认为二进制传送是最高效.
2008-05-26 12:58 | liangyj

# re: 两种网络数据格式的比较  回复  更多评论   

还是习惯用二进制格式的网络数据包了,毕竟在公司开发的产品不是开源的,所以只要双方定义好接口(协议)就可以了
2008-06-07 00:37 |

# re: 两种网络数据格式的比较[未登录]  回复  更多评论   

个人认为虽然xml比较方便一些,但是其过多附带的结构数据以及分析是的效率也是很多密集交互应用不能接受的吧,其实10串的处理到比xml简单直接很多~~
2008-09-05 22:00 | happyday

# re: 两种网络数据格式的比较  回复  更多评论   

使用二进制封装xml
2009-07-30 16:58 | ssed

# re: 两种网络数据格式的比较  回复  更多评论   

xml便于截包分析
2011-03-22 16:28 | asdfasdf

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理