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

前端之家收集整理的这篇文章主要介绍了[寒江孤叶丶的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版本的……

猜你在找的Cocos2d-x相关文章