最近整合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數量簡直是酸爽
后記
搜索protoc-gen-lua時, 無意間又搜到3年前自己的博文http://www.shnenglu.com/sunicdavy/archive/2013/04/24/199693.html
記得那個時候準備在服務器使用lua, 還好沒這么干, 轉了go, 否則后果不堪設想
lua上使用pb其實并不容易, 云風的pbc寫的不錯, 但怕有坑, sproto直接不兼容現有項目, 風險大于易用性所以果斷棄用
因此, 看來有必要自己寫一個支持良好的lua pb庫