原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的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 是库文件。到时候也要引用进项目中
首先要写一个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版本的……