最近整合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.cppblog.com/sunicdavy/archive/2013/04/24/199693.html
记得那个时候准备在服务器使用lua, 还好没这么干, 转了go, 否则后果不堪设想
lua上使用pb其实并不容易, 云风的pbc写的不错, 但怕有坑, sproto直接不兼容现有项目, 风险大于易用性所以果断弃用
因此, 看来有必要自己写一个支持良好的lua pb库