原創文章,歡迎轉載,轉載請註明:文章來自[寒江孤葉丶的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版本的……