ulua結合protoc-gen-lua的幾個坑
阿新 • • 發佈:2018-12-27
最近整合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超過限制的警告
這個錯誤真是讓我哭笑不得, protoc-gen-lua的可用性再一次被懷疑
我們的協議好歹分成了接近100個, 每個裡面訊息和資料是混合的, 更別說有些童鞋喜歡把一個專案的協議全寫在一個檔案裡, 那生成的local數量簡直是酸爽
後記
記得那個時候準備在伺服器使用lua, 還好沒這麼幹, 轉了go, 否則後果不堪設想
lua上使用pb其實並不容易, 雲風的pbc寫的不錯, 但怕有坑, sproto直接不相容現有專案, 風險大於易用性所以果斷棄用
因此, 看來有必要自己寫一個支援良好的lua pb庫