了解到lua的一個protobuf庫,接口帥氣,比之前用過的一些lua protobuf庫要好很多,深得我心。而且能保持更新,比其他庫幾年沒更新要放心。
lua-pb動態解析protobuf協議,無需生成一大坨難看的預定義lua代碼,要的就是這個帥氣清爽。
lua-pb需要用到lpeg, luabitop和struct3個c庫,因此你自己項目基本需要重新編譯一遍。
我用的是slua,不熟,找slua的c代碼都費了很久,結果竟然在slua工程下的build目錄下找到,話說在群里隨口問問竟然無一人熱心解答,人心不古。
自恃高手什么的最討厭了。
基本上,你需要slua.c這個文件,配合lua源碼,加入以上3個c庫,在slua.c的openlibs里注冊c庫接口(開頭幾行有注釋),編譯之即可,記得編譯選項為MT。
如果你不熟悉這個流程,請去翻閱programming in lua中關於lua接入c庫的章節。
編譯好后,請把lua-pb工程下的pb文件夾和pb.lua拷貝到你的lua工作目錄即可。
接下來你按照例子
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事件機制,有這個庫代碼會更帥氣。