@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);