x中集成protobuf (Protocol Buffers)

原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列]

博客地址:

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 int32id = 1; // IDrequired string str = 2; // stroptional int32opt = 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进行一层加密 然后发出去//这里接受到strstd::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的版本,跪求Google或者其他大神更新lua版!

这种精神使人能在旅行中和大自然更加接近,

x中集成protobuf (Protocol Buffers)

相关文章:

你感兴趣的文章:

标签云: