两种网络数据格式的比较
2015-12-30 23:49
387 查看
第一种类型,二进制格式的网络数据包,通常要首先接收包头,在包头中有校验数据校验获取的数据是否正确,同时包头中还有数据域存放接下来的内容域的大小,得到该大小之后开始接收内容包,然后对内容包进行解析,包头的大小是固定的,否则无法知道何时接收包头完毕进行解析.
第二种类型,XML格式组织的数据包,通常以连续几个\r\n之类的字符表示结束,在接收包的时候无法知道所要获取数据包的大小,只有每次判断时候已经接收到了表示结束的字符.
两种传送数据包优缺点比较:
1)网络传送效率比较:第一种的优点是接收数据包的效率高,首先按照包头的数据大小接收包头可以获知内容包的大小,再按照此大小获取数据包;而第二种数据包无法在接收的时候获取该数据包的大小,只能在每次接收的时候判断时候已经到达包的结尾,因此相比较而言第一种格式的数据包在网络传送效率上高一些.同时,由于第一种格式可以在包头中加入一些校验字段判断包是否合法,在数据校验这一块也具有优势.
2)解析数据包:第一种数据包没有固定的格式,或者准确的说没有固定的解析器用于解析这种格式的数据,因为每个人定出的协议都不尽相同;而第二种数据包有完备的解析XML格式数据的第三方库可用(libxml2,tinyxml,expat等),但是并不见得有了第三方的库解析起数据起来效率就一定高(这里指的是程序的效率,而不是编码的效率),因为XML解析比普通的数据解析要复杂的多,效率也就更加慢一些.
3)可扩展性:第一种数据包的格式不同,可扩展性也不尽相同,具体与每种格式的包有区别.第二种格式的数据包由于采用了XML格式,天正的具备很好的可扩展性.
4)数据安全性:第一种格式的数据包可以方便的实现数据的加密,而XML格式的数据实现加密不容易,基本上抓包就能看到数据.
综上,个人认为XML格式的数据包仅在可扩展性上有较大的优势,但是对于安全性,性能要求不太高而扩展性要求较大的协议还是建议使用XML格式的协议,毕竟如果协议制定的不好造成扩展性差也是麻烦的事情,因为客户端一旦放出去就收不回来的.目前jabber的通讯协议就是采用的XML格式的协议
第二种类型,XML格式组织的数据包,通常以连续几个\r\n之类的字符表示结束,在接收包的时候无法知道所要获取数据包的大小,只有每次判断时候已经接收到了表示结束的字符.
两种传送数据包优缺点比较:
1)网络传送效率比较:第一种的优点是接收数据包的效率高,首先按照包头的数据大小接收包头可以获知内容包的大小,再按照此大小获取数据包;而第二种数据包无法在接收的时候获取该数据包的大小,只能在每次接收的时候判断时候已经到达包的结尾,因此相比较而言第一种格式的数据包在网络传送效率上高一些.同时,由于第一种格式可以在包头中加入一些校验字段判断包是否合法,在数据校验这一块也具有优势.
2)解析数据包:第一种数据包没有固定的格式,或者准确的说没有固定的解析器用于解析这种格式的数据,因为每个人定出的协议都不尽相同;而第二种数据包有完备的解析XML格式数据的第三方库可用(libxml2,tinyxml,expat等),但是并不见得有了第三方的库解析起数据起来效率就一定高(这里指的是程序的效率,而不是编码的效率),因为XML解析比普通的数据解析要复杂的多,效率也就更加慢一些.
3)可扩展性:第一种数据包的格式不同,可扩展性也不尽相同,具体与每种格式的包有区别.第二种格式的数据包由于采用了XML格式,天正的具备很好的可扩展性.
4)数据安全性:第一种格式的数据包可以方便的实现数据的加密,而XML格式的数据实现加密不容易,基本上抓包就能看到数据.
综上,个人认为XML格式的数据包仅在可扩展性上有较大的优势,但是对于安全性,性能要求不太高而扩展性要求较大的协议还是建议使用XML格式的协议,毕竟如果协议制定的不好造成扩展性差也是麻烦的事情,因为客户端一旦放出去就收不回来的.目前jabber的通讯协议就是采用的XML格式的协议
相关文章推荐
- HttpPost登陆
- nodejs的某些api~(五) HTTP模块
- HttpGet登陆
- C# 实现HTTP POST请求与接收响应
- 网络笔记
- http-启用telnet并开启回显功能
- OkHttp的使用
- 请求网络下载图片2(读取是否存在缓存图片)
- 请求网络下载图片
- HTTPS
- HTTP协议详解
- HTTPS工作原理
- 运输层—TCP的拥塞控制
- 浅谈移动端网络优化
- Linux如何挂载网络硬盘
- linux环境下实现svn服务器支持http协议
- 【网络协议】数据链路层
- linux虚拟机与win主机之间ping通以及其他网络设置
- hdu3416 Marriage Match IV(最短路+网络流)
- Asp.Net WebAPI 通过HttpContextBase获取请求参数