Openresty下使用google protobuf,


业务要求,需要在nginx这边直接做pb编解码。我这里选用了https://github.com/cloudwu/pbc/tree/master/binding/lua。感兴趣的点击进去。

接下来就是如何做了,下载什么的就不用多说了,关键在于编译。我这里讲的是在linux下的支持,windows下后期在更新文件,需要的可以持续关注。

进入https://github.com/cloudwu/pbc/tree/master/binding/lua 。你会发现有这么一个句子:Make and install protobuf.so ( or protobuf.dll in windows ) and protobuf.lua into your lua path.将编译好的so,或dll放入文件下。对于非C++系的玩家来说,估计这是一道坎。

1.首先编译/master/binding/lua下的文件,里面有个make文件,直接执行,过程会遇到很多问题,就按照里面的提示对其进行安装,我这里总结下过程:

1). yum install 或者 apt-get install 一定要做好区分,不同的linux版本不一样的;

2). 最重要的说就是要安装lua,下载lua官方,我这里选用的lua5.1.4 Linux版本。然后进行安装,过程中记录安装的目录文件。

(这种网上有一大片,具体就不说明了,还

有gcc的安装也是一样)

3)将记录好的目录文件写到MakeFile中,这点很重要。打开MakeFile 里面有个LUADIR,将其更改为你的lua安装文件。然后在make。如果是之前还没安装类似文件的环境,估计过程会比较艰难,坚持过去就好。

4)将编译好的protobuf.so 和protobuf.lua拉入你的openresty下的lualib下。这里是你nginx_lua的默认运行环境。  你也可以在nginx.conf文件里指定 lua_package_path。

5)接下来就行protobuf的生成了,我个人建议去官网下载protoc-3.6.0-linux-x86_64.zip(按你自己系统的版本来)。然后编写proto,直接运行bin下面的protoc 就可以生成(安装好环境就可以)。

6)环境完成后,接下来就是代码要注意的编写的问题了,,附上我的测试代码

local pb = require "protobuf" 
--这个对应的是protobuf.lua  这里的lua 与protobuf.so绑定的,一定要两个在一个目录下
pb.register_file "*./test.pb" --这里也一定要注意目录
local pid = {} --一定要声明table  不然会在send部分报错。

pid = {
    testid = 10,
}

local stringbuffer = pb.encode("test.Mytest", pid) 

---注意这个  test.Mytest不是随便写的,要对应你的pb文件,下面贴出来

local res = pb.decode("test.Mytest", stringbuffer)


for k, v in pairs(res) do
    ngx.say(k .. "  " .. v)
end
-- ngx.say(res)
syntax = "proto3";

package test;

message Mytest {
  int64 testid=1;
}

好好研究吧。ng配置没要求,我就不说了。有问题直接留言,我第一时间回复,主要这方面的参考资料太少,我这里记录一下,帮助大家。

相关内容

    暂无相关文章