[寒江孤葉丶的Cocos2d-x之旅_29]在Cocos2d-x中集成protobuf (Protocol Buffers)

原創文章,歡迎轉載,轉載請註明:文章來自[寒江孤葉丶的Cocos2d-x之旅系列]

博客地址:http://blog.csdn.net/qq446569365

1.什麼是Protobuf?

數據傳輸格式有很多種最常見XML和Json,這兩種格式生成速度非常快,但是解析的效率卻很低。尤其在數據量非常大的情況下,會卡住好半天。並且這種格式的傳輸也會使得傳輸所耗費流量變大。解析效率最高,傳輸消耗流量最小的數據格式自然是Buffer。很多公司都封裝過自己的Buffer流傳輸的模塊。

偉大的谷歌殿下將他們封裝的Buffer流模塊給貢獻出來了!撒花~鼓掌~

也就是我這裏所提到的Protobuf。傳送門:https://github.com/google/protobuf

2.如何安裝Protobuf

Protobuf的安裝是比較複雜的,但是有位偉大的作者,將他封裝成了一個傻瓜式操作,從下載到配置一氣呵成!

https://gist.github.com/BennettSmith/7150245 打開大神的git,點擊右邊的Download Gist,進行下載,下載解壓後,得到一個build-protobuf-2.5.0.sh文件,直接將他拖到終端裏,按下回車!


然後界面會瘋狂的滾動,直到你看到了一個綠色的Done!


這就大功告成了!所生成的文件在哪兒呢?

/Users/archerpeng/protobuf 

其中archerpeng是我的用戶名,替換成你自己的!(下不贅述)


裏邊共有三個文件夾。

bin 是用來生成.h和.cc的編譯器(後詳述)

include 是頭文件(們),到時候要加入到項目頭文件搜索路徑

lib 是庫文件。到時候也要引用進項目中

3.如何安裝使用編譯器生成文件?

首先要寫一個proto文件(不妨叫helloworld.proto),在該文件中添加一個名爲"helloworld"的message結構,用來描述通訊協議中的結構化數據。該文件的內容如下

 message helloworld 
 { 
    required int32     id = 1;  // ID 
    required string    str = 2;  // str 
    optional int32     opt = 3;  //optional field 
 }

下邊就要調用之前所說的bin目錄裏邊的編譯器了,在終端裏輸入

/Users/archerpeng/protobuf/bin/protoc --proto_path=/Users/archerpeng/protobuf/include  --cpp_out=/Users/archerpeng/Downloads/protobuf-master/src /Users/archerpeng/src/helloworld.proto 

按回車就可以了。

上邊的有點長,簡單的說 
上邊所說的bin的路徑/protoc --proto_path=include文件的路徑  --cpp_out=CPP文件輸出保存的路徑 .proto文件所在路徑/helloworld.proto 

這時,能看到自動編譯出來兩個文件


然後將這倆文件 以及剛剛那個proto都放到 Cocos2d項目的class文件下,並將其導入項目

4.Xcode 的配置!

首先將之前所提到的lib目錄中的libprotobuf.a導入項目


緊接着,添加頭文件搜索路徑:


就是剛剛那個include路徑!

然後……編譯!

5.簡單使用實例:

    helloworld hw;
    hw.set_id(12);
    hw.set_opt(123);
    hw.set_str("ArcherPeng");
    std::string str=hw.SerializeAsString();
    //最好在這裏再對Str進行一層加密  然後發出去
    
    
    //這裏接受到str
    std::string recStr = str;
    helloworld hwOut;
    if(hwOut.ParseFromString(recStr)) // 解析該字符串
    {
        CCLOG("hwOut : %d  %d  %s",hwOut.id(),hwOut.opt(),hwOut.str().c_str());
    }<span style="font-size:18px;">
</span>
運行結果:

hwOut : 12  123  ArcherPeng

這樣就成功了!

這裏有lua版的:https://github.com/cloudwu/pbc/tree/master/binding/lua

改天看看怎麼用這個lua版本的……


發佈了55 篇原創文章 · 獲贊 3 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章