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配置沒要求,我就不說了。有問題直接留言,我第一時間回覆,主要這方面的參考資料太少,我這裏記錄一下,幫助大家。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章