网络传输数据格式的选择:

来源:互联网 发布:网络直销模式典型公司 编辑:程序博客网 时间:2024/05/24 02:38
网络传输数据格式的选择:


对于客户端和服务端的数据传输通常会有以下几点考虑:
1.网络数据大小——占用带宽,传输效率:虽然对单个用户来说,数据量传输很小,但是对于服务器端要承受众多的高并发数据传输,必须要考虑到数据占用带宽,尽量不要有冗余数据,这样才能够少占用带宽,少占用资源,少网络IO,提高传输效率;


2.网络数据安全性——敏感数据的网络安全:对于相关业务的部分数据传输都是敏感数据,所以必须考虑对部分传输数据进行加密;


3.编码复杂度——序列化和反序列化复杂度,效率,数据结构的可扩展性,可维护性:对于平台相关业务的代码实现也需要考虑到数据发送方和数据接收方数据处理的复杂度和数据结构的可扩展性,可维护性,人力成本和实施复杂度也必须考虑在内;


4.协议通用性——大众规范:数据类型必须是跨平台,数据格式是通用的,大家普遍能接受上手的;




以下我们通过几种不同类别的协议数据类型进行比较:
自定义二进制数据                
优点:信息体积小,对应以上”1“              
缺点:编码复杂度高(自己定义消息格式,自己编写序列化和反序列化方法,自己进行容错处理,可扩展性不强,比如添加个字段,就必须改两端的逻辑处理),对应以上”3“;


提供序列化和反序列化库的开源协议支持的数据类型
比如protocol buffers, json,  Thrift
优点:是一种流行的通用数据格式,扩展相当方便,序列化和反序列化相当方便(有相应库),错误处理方便(库支持);


文本化数据
比如xml,json
优点:序列化,反序列化容易(库支持),调试方便,可视化强
缺点:相对于二进制存储占用体积大




选择json,因为他是“提供序列化和反序列化库的开源协议还是文本化的协议”,原因如下:
1.自定义二进制格式进行传输的工作,整个过程在定义消息,write,read的过程过于复杂,还很容易出错,对于很多数据交互的程序,会花费大量的时间在上面;
2.自定义二进制格式不便于扩展,但json可以很好地解决这种问题;
3.虽然相比较二进制,json的占用空间稍大,但是我们可以通过网络数据压缩来解决,况且json本身也是轻量级的,传输效率也很高;
4.去看《unix编程艺术》吧,第5章--文本化,好协议产生好实践;第6章--透明性:来点儿光 会告诉你使用文本化协议的好处;




json 和XML 比较


XML 更适合数据定义,数据存储。它对数据的表达使得这个数据脱离你程序的上下文仍然存在意义并且可以被解读。所以 XML 适合作为配置文件,以及数据存储,存盘文件格式等等。


JSON 更适合数据传输。对于传输而言,双方必然需要遵循协商好的协议,因而 JSON 对数据的表达并不需要在数据传输的双方以外仍然具有可解读的意义,只要传输的双方能读懂即可。所以 json 更适合作为数据传输双方的通信协议。


如果把用途局限在数据传输这个领域,则 XML 没有任何优势。唯一可能的优势或许是,如果你的数据本来就是使用 XML 组织和定义的,直接使用 XML 传输会更方便。


数据传输跟数据存储的侧重点本来就不同,即便是 UNICODE 对于传输与存储也是两种不同的编码,所以个人觉得没有必要始终执着于把一个更适合数据存储的格式用于数据传输。

















































































































































































































































































































































































































































































0 0
原创粉丝点击