• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

luapbc

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
先要将proto文件编译成.pb文件,然后再动态绑定实现lua protobuffer,这就需要了解云风做的pbc的项目,地址为:https://github.com/cloudwu/pbc/blob/master/binding/lua/README.md

具体的方式是,下载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 = -O2为CFLAGS = -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
-->编译成功
具体的调用方法在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人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap