[寒江孤叶丶的Cocos2d-x之旅_29]在Cocos2d-x中集成protobuf (Pro
原创文章,欢迎转载,转载请注明:文章来自[寒江孤叶丶的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版本的…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |