在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Protocol Buffer简介 Protocol Buffer是google于2008推出的一种数据交换的格式,它独立于语言,独立于平台。,google 提供了多种语言的实现,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 和 json 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。现今经过多个版本迭代已经到了3.x版本 其实说白了Protocol Buffer就是一个协议,和解释器。可以用proto文件把model或者其他数据序列化Or反序列化(把二进制数据解析为Model或者把Model转为二进制数据)。它添加了多语言的支持,在不同语言下,遵守同样的协议(使用同样的proto),这样就可以保证在不同端,数据可以交互,而且不用担心数据的序列化问题。 安装Mac上的工具之类的都可以借助brew这是Mac下和Linux下apt get install一样强大的工具,用一用你就知道了! <第一步>安装brewhomebrew是mac下用来代替apt-get命令的,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。安装protobuf时缺少automake以及libtool,需要brew命令进行安装。 打开Mac终端执行下面命令。即可安装(也可自行百度Mac下如何安装brew) /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 执行安装完成后可以执行以下命令查看安装是否成功 brew --version 接下来安装Protobuf Compiler,执行一下几个命令即可: Automake 是一种帮助『自动』产生 Makefile 文件的软件,并且让开发出来的的软件可以象 Apache,MySQL 和常见的 GNU 软件一样,程序设计者只需要写一些预先定义好的宏 (macro),提交给Automake处理后会产生一个可以供 Autoconf 使用的 Makefile.in文件。再配合利用 Autoconf产生的自动配置设置文件 configure 即可产生一份符合 GNU Makefile 惯例的 Makeifle 了. libtool是一种属于GNU建构系统的GNU程序设计工具,用来产生便携式的库; brew install automake brew install libtool brew install protobuf <第二步>安装完成后可以再自己电脑进入一个指定的目录中执行以下命令git clone https://github.com/google/protobuf.git 拉取到本地成功后进入到protobuf文件夹目录中执行 ./autogen.sh <第三步>安装Protobuf,分别执行以下命令<这是一个需要时间的过程,耐心等待一下知道安装完成>./configure make check make make install 所有操作完成后可以执行 protoc --version 命令检测是否真正安装成功,如下图: <第四步>安装Protobuf python进入到protobuf/python文件夹目录中执行sudo python setup.py install,执行完后可以通过执行sudo python setup.py test检查是否有安装成功,如果最后提示 ---------------------------------------------------------------------- Ran 826 tests in 3.347s OK (skipped=12) 如下图: <备注> 安装编译完成protobuf和protobuf-gen-lua后不安装protobuf python的话就会出现在最后生成protobuf lua文件时报错如下: ➜ Downloads protoc -I=./ --lua_out=./ *.proto Traceback (most recent call last): File "/usr/local/bin/protoc-gen-lua", line 17, in <module> import plugin_pb2 File "/Users/fanlinsong/protoc-gen-lua/plugin/plugin_pb2.py", line 3, in <module> from google.protobuf import descriptor ImportError: No module named google.protobuf --lua_out: protoc-gen-lua: Plugin failed with status code 1. 那么就是安装成功了,此时再导入对应的pb2.py文件即可使用。 -------------------------------------------------------------------------------------------------------------------------------------------------------- 执行python setup.py install 时可能有:This script requires setuptools version 0.6c11 to run 可从:http://download.csdn.net/download/fhqsse220/5602687下载 gzip -d setuptools-0.6c11.tar.gz tar xf setuptools-0.6c11.tar cd setuptools-0.6c11python setup.py install 返回如下则表示安装成功 Installed /usr/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg Processing dependencies for setuptools==0.6c11 Finished processing dependencies for setuptools==0.6c11 ---------------------------------------------------------------------------------------------- 继续报错:error: package directory 'google/protobuf/compiler' does not exist 解决办法:在google/protobuf/下创建compiler文件夹 再次在protobuf文件夹下运行:python setup.py install 。最终提示安装成功。 --------------------------------------------------------------------------------------------------------------------------------------------------------------------- <第五步>安装lua,可以进入lua的官方网站下载最新lua包官方网址: http://www.lua.org/download.html 下载lua压缩包,解压后进入lua-5.3.5文件夹目录分别执行以下2个命令 make macosx test make install 如下图: 配置对应的环境变量<有的机器可以不配置> export LUA_PATH=/Users/fanlinsong/lua-5.3.5/src export PATH=$PATH:$LUA_PATH
也可直接使用brew命令安装lua: brew install lua 有的机器也需要安装pkg-config-0.28,有的不需要<我的就不需要安装虽然安装protoc-gen-lua时提示要我安装,但是我没有安装也直接把protoc-gen-lua搞定了>:安装步骤如下,终端操作 curl http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz -o pkg-config-0.28.tar.gz tar -xf pkg-config-0.28.tar.gz cd pkg-config-0.28 ./configure --with-internal-glib sudo make install <第六步>安装protoc-gen-lua可以直接去这个地址 https://github.com/sean-lin/protoc-gen-lua 下载到本地 也可以终端执行git clone https://github.com/sean-lin/protoc-gen-lua.git 命令 然后终端在该路径打开终端进入到该文件夹中,进入执行 cd protobuf && make 命令 然后创建一个链接到protoc-gen-lua , $cd /usr/local/bin && sudo ln -s 你存储protoc-gen-lua的文件在所在路径/protoc-gen-lua/plugin/protoc-gen-lua 到此为止相关的安装已经完成,可以测试一下安装的效果: 创建一个.proto文件如下:
syntax = "proto2";//标注使用的是proto的那个版本,一定要加入该行代码 // syntax = "proto3";//标注使用的是proto的那个版本 /** 标注使用的是proto的那个版本,一定要加入该行代码, 否则在最后执行导出lua文件时会报错提示指定使用的proto版本 **/ message Teacher { required int32 id = 1; required string name = 2; optional string email = 3; required int32 gender= 4; }
如果不加入 syntax = "proto2";汇报如下图错误: 接下来可以执行 protoc -I=./ --lua_out=./ *.proto命令 说明如下: protoc protobuf的指令 -I= 指定proto文件所在的目录文件夹 --lua_out= 指定导出转换后的.lua文件的存储目录 *.proto 文件名称.proto 要执行转换的proto文件名称(文件具体路径及名称)
也可直接创建一个python脚本文件或者shell脚本文件,直接批量执行拾取要转换的文件 protoc -I=./ --lua_out=./ *.proto 创建shell脚本直接使用下面代码 #方式一 python 和 shell均可使用次代码 # protoc -I=./ --lua_out=./ *.proto
#方式二 只有shell能使用 #!/bin/bash for file in ./*.proto do if test -f $file then protoc $file --lua_out=./ fi done
|
请发表评论