@import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
如何選擇數(shù)據(jù)交換協(xié)議
選擇什么樣的協(xié)議跟我們的應(yīng)用場景有很大的關(guān)系。我們需要考慮我們開發(fā)是否方便、接口是否容易發(fā)布、是否需要考慮帶寬占用成本、序列化和反序列化的性能、接口協(xié)議的擴展性等等。下面我們看下幾個比較常用的交換協(xié)議實現(xiàn)。
協(xié)議 | 實現(xiàn) | 跨語言 | 性能 | 傳輸量 | RPC |
xml | 廣泛 | 幾乎所有 | 低 | 很大 | N(可實現(xiàn)) |
json | 廣泛 | 大量 | 一般 | 一般 | N(可實現(xiàn)) |
php serialize | PHPRPC | 大量 | 一般 | 一般 | Y |
hessian | hessian | 大量 | 一般 | 小 | Y |
thrift | thrift | 大量 | 高 | 小 | Y |
protobuf | protobuf | 大量 | 高 | 小 | N(可實現(xiàn)) |
ice | ice | 大量 | 高 | 小 | Y |
avro | Apache Avro | 少量 | 高 | 小 | Y |
messagepack | messagepack | 大量 | 高 | 小 | Y |
上面表格列出了一些常用數(shù)據(jù)交換協(xié)議的一些特性的比較。這里并沒有比較好壞,只是想說明不同數(shù)據(jù)交換協(xié)議是有區(qū)別的,所以我們需要在我們的應(yīng)用場景中進行選擇。
messagepack相關(guān)資料
http://pluto418.iteye.com/blog/1108457
優(yōu)勢:
1.序列化和反序列化所需要的時間少。通過30000條的記錄來測試,msgpack序列化的時間比使用jason來序列化JSON的時間要少三分之一;而反序列化的時間則要少一半。
2.生成的文件體積小。同樣也是基于30000條記錄來測試,msgpack序列化后生成的二進制文件比用jason序列化出來的時間要少一半。
劣勢:
1.msgpack對復(fù)雜的數(shù)據(jù)類型(List、Map)支持的不夠,序列化沒有問題,但是反序列化回來就很麻煩,尤其是對于java開發(fā)人員。
2.在上面也提到過,msgpack是通過value的順序來定位屬性的,那么需要在不同的語言中都要維護同樣的模型以及模型中屬性的順序。這個會讓開發(fā)人員很困擾。
3.msgpack無法支持在模型中包含和嵌套其他自定義的模型(如weibo模型中包含comment的列表)。
@import url(http://m.tkk7.com/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