1. 程式人生 > >ulua結合protoc-gen-lua的幾個坑

ulua結合protoc-gen-lua的幾個坑

最近整合ulua到專案裡進行熱更新, protoc-gen-lua這古老的東西重新讓我繼續發部落格, 因為坑

生成好的協議報錯找不到protobuf

在每個protoc-gen-lua生成的lua檔案裡, 都有一行

local protobuf = require "protobuf"

本身按照官方出的沒問題, 但是在ulua的目錄裡, 總是報protobuf找不到的錯誤. 前後對比了下我生成的lua和ulua官方生成的程式碼裡

發現居然他修改了地址改為了

local protobuf = require "protobuf/protobuf"

好吧, 只有修改生成器程式碼protoc-gen-lua\plugin\protoc-gen-lua中第412行改為

lua('local protobuf = require "protobuf/protobuf"\n')

生成訊息無法找到Descriptor反射查資訊

在LuaFramework\ToLua\Lua\protobuf\protobuf.lua的939行新增
message_meta._member.Descriptor = descriptor
在訊息裡就可以通過msg.Descriptor獲得此訊息的反射資訊

由於proto檔案定義的內容過多導致的lua local超過限制的警告

image

這個錯誤真是讓我哭笑不得, protoc-gen-lua的可用性再一次被懷疑

我們的協議好歹分成了接近100個, 每個裡面訊息和資料是混合的, 更別說有些童鞋喜歡把一個專案的協議全寫在一個檔案裡, 那生成的local數量簡直是酸爽

後記

記得那個時候準備在伺服器使用lua, 還好沒這麼幹, 轉了go, 否則後果不堪設想

lua上使用pb其實並不容易, 雲風的pbc寫的不錯, 但怕有坑, sproto直接不相容現有專案, 風險大於易用性所以果斷棄用

因此, 看來有必要自己寫一個支援良好的lua pb庫