创的技术博客
C++对我而言就是有STL带class能处理多态,继承的C.
第一种类型,二进制格式的网络数据包,通常要首先接收包头,在包头中有校验数据校验获取的数据是否正确,同时包头中还有数据域存放接下来的内容域的大小,得到该大小之后开始接收内容包,然后对内容包进行解析,包头的大小是固定的,否则无法知道何时接收包头完毕进行解析.

第二种类型,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 阅读(1655) 评论(4)  编辑 收藏 引用 所属分类: 网络编程服务器设计
Comments
  • # re: 两种网络数据格式的比较
    perddy
    Posted @ 2008-04-21 23:59
    楼主总结的很不错。

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

    使用方面,我更多是使用XML格式的,可能和个人的协议设计能力有关吧:)  回复  更多评论   
  • # re: 两种网络数据格式的比较
    过客
    Posted @ 2008-05-04 13:29
    XML格式 无论是解析还是打包还是协议定制都比二进制格式复杂多了,如果不可考虑跨平台和跨语言,用XML格式是自残  回复  更多评论   
  • # re: 两种网络数据格式的比较
    liangyj
    Posted @ 2008-05-26 12:58
    xml分析慢,传送量大........
    二进制的效率等各个方面,就要看设计的人的水平了.
    个人认为二进制传送是最高效.  回复  更多评论   
  • # re: 两种网络数据格式的比较

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

标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]