业务要求,需要在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配置没要求,我就不说了。有问题直接留言,我第一时间回复,主要这方面的参考资料太少,我这里记录一下,帮助大家。