了解到lua的一个protobuf库,接口帅气,比以前用过的一些lua protobuf库要好不少,深得我心。并且能保持更新,比其余库几年没更新要放心。c++
lua-pb动态解析protobuf协议,无需生成一大坨难看的预约义lua代码,要的就是这个帅气清爽。c#
lua-pb须要用到lpeg, luabitop和struct3个c库,所以你本身项目基本须要从新编译一遍。函数
我用的是slua,不熟,找slua的c代码都费了好久,结果居然在slua工程下的build目录下找到,话说在群里随口问问居然无一人热心解答,人心不古。ui
自恃高手什么的最讨厌了。lua
基本上,你须要slua.c这个文件,配合lua源码,加入以上3个c库,在slua.c的openlibs里注册c库接口(开头几行有注释),编译之便可,记得编译选项为MT。spa
若是你不熟悉这个流程,请去翻阅programming in lua中关于lua接入c库的章节。code
编译好后,请把lua-pb工程下的pb文件夹和pb.lua拷贝到你的lua工做目录便可。blog
接下来你按照例子接口
require "protos.person"
加载一个poroto文件会遇到问题,找不到该文件。事件
修改一下package.path,添加路径便可。路径通常是你的lua工程目录。
大功告成,目前已成功在pc下运行。
实际使用中遇到一个较大的问题,该库对负数的处理并无按照protobuf的标准,它自身解析和序列化负数是成功的,但解析其余库如c++库生成的protobuf流,则遇到负数会有问题。你须要在unpack和pack2个文件里对int32类型重写下,参考c++代码写个函数,而后将varint32的pack和unpack回调替换下。
ps:
lua-pb用到的struct库,更是一个帅气的c库,相见恨晚。用来解决传参问题再合适不过了。用来改造下c#,lua事件机制,有这个库代码会更帅气。