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

如何選擇數據交換協議

  選擇什么樣的協議跟我們的應用場景有很大的關系。我們需要考慮我們開發是否方便、接口是否容易發布、是否需要考慮帶寬占用成本、序列化和反序列化的性能、接口協議的擴展性等等。下面我們看下幾個比較常用的交換協議實現。

協議實現跨語言性能傳輸量RPC
xml廣泛幾乎所有很大N(可實現)
json廣泛大量一般一般N(可實現)
php serializePHPRPC大量一般一般Y
hessianhessian大量一般Y
thriftthrift大量Y
protobufprotobuf大量N(可實現)
iceice大量Y
avroApache Avro少量Y
messagepackmessagepack大量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://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