pbc-lua使用

1 篇文章 0 订阅
0 篇文章 0 订阅

lua pbc

先要将proto文件编译成.pb文件,然后再动态绑定实现lua protobuffer,这就需要了解云风做的pbc的项目,地址为:https://github.com/cloudwu/pbc/blob/master/binding/lua/README.md
在github上下载pbc,https://github.com/cloudwu/pbc

具体的方式是,下载pbc的项目;在 pbc/binding/lua下面编译出 protobuf.so放在LUA_PATH下面,并将 protobuf.lua放在LUA_PATH下,就可以调用protobuf中的库方法

cd pbc/binding/lua
make
  •  

如果提示-fPIC
–>删去 pbc-master/build/o下的所有文件
–>修改 pbc-master/Makefile中的 CFLAGS = -O2CFLAGS = -O2 -fPIC
然后就在pbc-master目录下make

cd pbc/binding/lua
make
  •  

如果提示 liblua.a XXX -fPIC
那么唯有重新编译一次lua了

–>cd lua-5.1.4/src
–>修改 Makefile 中的 CFLAGS= -O2 -Wall $(MYCFLAGS)CFLAGS= -O2 -Wall $(MYCFLAGS) -fPIC
–>cd ..
–>make linux
–>sudo make install

cd pbc/binding/lua
make
-->编译成功
  • 1

具体的调用方法在pbc的项目中有例子说明,主要的思路是:
1 require "protobuf"
2 注册pb文件,利用该文件 decode 或者 encode 它的 protobuffer 对象,见下面的例子

echo "package test" > test.proto
echo "message Mytest {optional sint64 testid=1;}" >> test.proto
protoc --descriptor_set_out test.pb test.proto
  •  

以上方法生成了pb文件,下面的方法是用lua对pb的decode和encode过程

pb = require "protobuf"
protobuf.register_file("./test.pb")

stringbuffer = pb.encode("test.Mytest", { testid = 10 })
result = pb.encode("test.Mytest", stringbuffer)
print("result=" .. result.testid)
  •  

这只是云风提供的方法之一,lua对pb的decode和encode过程的方法之二如下

file = io.open("./test.pb", "rb")
buffer = file:read "*a"
file:close()
pb.register(buffer)

stringbuffer = pb.encode("test.Mytest", { testid = 100 })
result = pb.decode("test.Mytest", stringbuffer)
print("result=" .. result.testid)
  •  

云风还提供了第三种方法,是用Lua parser,因为这种方法需要用到lua 的 Lpeg模块,暂时还没有研究这个功能,等后面再补上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值