2011-11-08 150 views
15

我目前正在研究改進我們現有的C++網絡手工序列化機制的方式,以維護我們現有的二進制協議。 第一種方法是使用Boost.Asio和Boost.Serialisation使用二進制序列化對其進行編碼。無論如何,它表明它有點慢(10%),我們目前的手工實施。任何人都有使用google protobuf和Boost.Asio的實際_real_work_經驗?Boost.Asio與谷歌協議緩衝區

我搜索谷歌的樣品,但也僅僅能先到了這個例子:

Boost Asio with google protocol buffers sample

有誰在任何實際的項目做的?我對性能數據非常感興趣,因爲這必須相當快...

+0

您可以將顯示數字圖像? –

+0

對不起,我不能透露:( – jvaz

回答

22

我們使用boost :: asio和Protobuf來實現複雜的低消息速率協議。對於簡單的高消息速率協議,我們使用boost :: asio和自定義序列化。

C++ Protobuf庫使用std :: string來表示它反序列化的消息的字符串字段,這意味着Protobuf會爲每個收到的消息中的每個字符串字段執行一次免費存儲分配。這使得Protobuf對於真正的高頻消息傳輸並不是很高效。

但是,如果可以的話,我會在任何地方使用Protobuf。它是製作豐富,複雜,獨立於平臺,兼容前向和後向協議的奇妙工具。

附錄

因爲它看起來像人都在閱讀這個答案,我應該分享,我已經瞭解到,在C++的Protobuf你可以重複使用反序列化消息對象讀取時減少malloc的頻率。

見優化技巧:

https://developers.google.com/protocol-buffers/docs/cpptutorial

+0

感謝詹姆斯的輸入,非常感謝:) – jvaz