@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

如何选择数据交换协议

  选择什么样的协议跟我们的应用场景有很大的关系。我们需要考虑我们开发是否方便、接口是否容易发布、是否需要考虑带宽占用成本、序列化和反序列化的性能、接口协议的扩展性等等。下面我们看下几个比较常用的交换协议实现。

协议 实现 跨语言 性能 传输量 RPC
xml 广泛 几乎所有 很大 N(可实现)
json 广泛 大量 一般 一般 N(可实现)
php serialize PHPRPC 大量 一般 一般 Y
hessian hessian 大量 一般 Y
thrift thrift 大量 Y
protobuf protobuf 大量 N(可实现)
ice ice 大量 Y
avro Apache Avro 少量 Y
messagepack messagepack 大量 Y

  上面表格列出了一些常用数据交换协议的一些特性的比较。这里并没有比较好坏,只是想说明不同数据交换协议是有区别的,所以我们需要在我们的应用场景中进行选择。

 messagepack相关资料

http://pluto418.iteye.com/blog/1108457
优势:
1.序列化和反序列化所需要的时间少。通过30000条的记录来测试,msgpack序列化的时间比使用jason来序列化JSON的时间要少三分之一;而反序列化的时间则要少一半。
2.生成的文件体积小。同样也是基于30000条记录来测试,msgpack序列化后生成的二进制文件比用jason序列化出来的时间要少一半。
 
劣势:
1.msgpack对复杂的数据类型(List、Map)支持的不够,序列化没有问题,但是反序列化回来就很麻烦,尤其是对于java开发人员。
2.在上面也提到过,msgpack是通过value的顺序来定位属性的,那么需要在不同的语言中都要维护同样的模型以及模型中属性的顺序。这个会让开发人员很困扰。
3.msgpack无法支持在模型中包含和嵌套其他自定义的模型(如weibo模型中包含comment的列表)。

@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

posted on 2011-12-26 10:57 tobyxiong 阅读(958) 评论(0)  编辑  收藏 所属分类: java