关于lua扩展库lpack的使用指南

最近在研究luasocket,准备用全部用lua的扩展库来实现一套轻量级框架,用来做一些工具、简单的游戏服务器,以及作为网络库用在cocos2dx中。完善的网络库必然会遇到粘包、半包的问题,luasocket也不例外,由于网络部分在lua,协议的制定和buff的解析都没有合适的方案,又不想在C++中来封装接口,后面在网上查了一些资料,发现lua也有一个二进制打包的扩展库——lpack,了解之后发现还是蛮好用的,就决定使用它来做buff解析,用以解决粘包、半包的问题。首先需要下载lpack的源码,地址是lpack的下载地址,然后解压,里面有lpack.c和makefile文件。

然后是编译lpack,有两种方式来编译和初始化lpack 1、将lpack.c加到宿主程序的源码里面,然后在初始化lua的地方调用初始化函数:

luaopen_pack(lua_state);

2、将lpack编译成dll(so),然后在lua里面调用:

require(“lpack”)然后说一下lpack的接口,lpack扩展库提供了两个接口,pack和unpack。但是有两种调用方法,使用宏(USE_GLOBALS)来控制,第一种是使用全局接口(pack/unpack),另外一种是将这两个接口插入到string的空间里面(string.pack/string.unpack)。

lpack的具体用法 1、打包接口pack的使用,全局名字容易混淆lua本身函数unpack,使用string.pack好些,也可以修改源码修改函数名。

–luapack为我修改的接口名字local _ss = luapack(“>P”, “中国asd”)local _ss2 = luapack(“>h”, 500)_ss = _ss.._ss2print(_ss, #_ss)–调用结果中国asd9中国asd11

2、解包接口unpack的使用

ne, value = luaunpack(_ss, “>P”)print(ne, value)_ss = string.sub(_ss, ne, #_ss)local ne, value = luaunpack(_ss, “>h”)print(ne, value)–调用结果10中国asdne, value1, value2 = luaunpack(_ss, “>Ph”)print(ne, value, value2)–调用结果12中国asd 500

打包变量类型定义

_BSTRING _WSTRING _SSTRING _STRING _FLOAT _DOUBLE _NUMBER _CHAR_BYTE_SHORT _USHORT _INT_UINT_LONG_ULONG ‘L’/* unsigned long */打包字节序,分为以下3种 _BIGENDIAN _NATIVE’=’/* native endian */

好了,,到这里如何使用lpack已经很清楚,接着就可以利用lpack的特性设计buff来解析网络字节流了。再次吐槽一下,这个编辑器没换缩进很难使用啊!!

记忆的屏障,曾经心动的声音已渐渐远去。

关于lua扩展库lpack的使用指南

相关文章:

你感兴趣的文章:

标签云: