最近整合ulua到項(xiàng)目里進(jìn)行熱更新, protoc-gen-lua這古老的東西重新讓我繼續(xù)發(fā)博客, 因?yàn)榭?/p>
生成好的協(xié)議報(bào)錯(cuò)找不到protobuf
在每個(gè)protoc-gen-lua生成的lua文件里, 都有一行
local protobuf = require "protobuf"
本身按照官方出的沒問題, 但是在ulua的目錄里, 總是報(bào)protobuf找不到的錯(cuò)誤. 前后對(duì)比了下我生成的lua和ulua官方生成的代碼里
發(fā)現(xiàn)居然他修改了地址改為了
local protobuf = require "protobuf/protobuf"
好吧, 只有修改生成器代碼protoc-gen-lua\plugin\protoc-gen-lua中第412行改為
lua('local protobuf = require "protobuf/protobuf"\n')
生成消息無(wú)法找到Descriptor反射查信息
在LuaFramework\ToLua\Lua\protobuf\protobuf.lua的939行添加
message_meta._member.Descriptor = descriptor
在消息里就可以通過(guò)msg.Descriptor獲得此消息的反射信息
由于proto文件定義的內(nèi)容過(guò)多導(dǎo)致的lua local超過(guò)限制的警告

這個(gè)錯(cuò)誤真是讓我哭笑不得, protoc-gen-lua的可用性再一次被懷疑
我們的協(xié)議好歹分成了接近100個(gè), 每個(gè)里面消息和數(shù)據(jù)是混合的, 更別說(shuō)有些童鞋喜歡把一個(gè)項(xiàng)目的協(xié)議全寫在一個(gè)文件里, 那生成的local數(shù)量簡(jiǎn)直是酸爽
后記
搜索protoc-gen-lua時(shí), 無(wú)意間又搜到3年前自己的博文http://www.shnenglu.com/sunicdavy/archive/2013/04/24/199693.html
記得那個(gè)時(shí)候準(zhǔn)備在服務(wù)器使用lua, 還好沒這么干, 轉(zhuǎn)了go, 否則后果不堪設(shè)想
lua上使用pb其實(shí)并不容易, 云風(fēng)的pbc寫的不錯(cuò), 但怕有坑, sproto直接不兼容現(xiàn)有項(xiàng)目, 風(fēng)險(xiǎn)大于易用性所以果斷棄用
因此, 看來(lái)有必要自己寫一個(gè)支持良好的lua pb庫(kù)