首页
学习
活动
专区
圈层
工具
发布

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

最近在研究luasocket,准备用全部用lua的扩展库来实现一套轻量级框架,用来做一些工具、简单的游戏服务器,以及作为网络库用在cocos2dx中。...完善的网络库必然会遇到粘包、半包的问题,luasocket也不例外,由于网络部分在lua,协议的制定和buff的解析都没有合适的方案,又不想在C++中来封装接口,后面在网上查了一些资料,发现lua也有一个二进制打包的扩展库...然后是编译lpack,有两种方式来编译和初始化lpack 1、将lpack.c加到宿主程序的源码里面,然后在初始化lua的地方调用初始化函数: luaopen_pack(lua_state);...2、将lpack编译成dll(so),然后在lua里面调用: require("lpack") ---- 然后说一下lpack的接口,lpack扩展库提供了两个接口,pack和unpack。...---- lpack的具体用法 1、打包接口pack的使用,全局名字容易混淆lua本身函数unpack,使用string.pack好些,也可以修改源码修改函数名。

2.6K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Nginx Lua扩展模块

    # Nginx Lua扩展模块 ngx_lua模块概念 ngx_lua模块环境准备 方式一 方式二 OpenResty卸载 ngx_lua指令图 语法API ngx.say ngx.print ngx.flush...OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。...用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。所以本身 OpenResty 内部就已经集成了 Nginx 和 Lua,所以我们使用起来会更加方便。...而Lua-resty-redis 库是 OpenResty 提供的一个操作 Redis 的接口库,可根据自己的业务情况做一些逻辑处理,适合做复杂的业务逻辑。...Options 是一个参数的 Lua 表结构,里面包含数据库连接的相关信息。

    4.5K20

    FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器

    Lua具有如下特点: Lua 拥有虚拟机的概念,而其全部用标准C实现,不依赖任何库即可编译安装,更令人欣喜的是,整个Lua 的实现代码并不算多,可以直接继承到项目中,并且对项目的编译时间几乎没有什么影响...Lua的扩展也非常的容易,将C++是对象、函数导入到lua中会涉及到一些技巧,如果纯粹使用lua CAPI会稍显繁杂,幸运的是一些第三方库简化了这些操作,而FFLUA绝对是最好用的之一。...嵌入Lua: 嵌入lua脚本,必须要把lua脚本载入lua虚拟机,lua中的概念称之为dofile,FFLUA中封装了dofile的操作,由于lua文件可能集中放在某个目录,FFLUA中也提供了设置lua...扩展LUA: 这也是非常重要的操作,嵌入lua总是和扩展lua相伴相行。lua若要操作C++中的对象或函数,那么必须先把C++对应的接口注册都lua中。...总结: FFLUA是简化C++嵌入绑定lua脚本的类库 FFLUA只有三个头文件,不依赖除lua之外的任何的类库,开发者可以非常容易的使用FFLUA FFLUA 对于常用的STL数据结构进行了支持 FFLUA

    2.9K70

    Redis的Lua的功能扩展

    Redis支持使用Lua脚步来进行功能扩展,这个能力给Redis带来了更多的应用场景,你可以编写若干命令组合,作为一个小型的非阻塞事务或者更新逻辑 使用脚本的好处 1更快 Redis应用的使用方式很多都是...,中间不会被其他命令插入,因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务 4复用 客户端发送的脚步会永久存在redis中,这样,其他客户端可以复用这一脚本而不需要使用代码完成相同的逻辑 Lua...脚本示例 1hello world 先实现一个简单脚本,仅仅返回一个字符串 代码 文件名 hello.lua 内容 local msg = "Hello, world!"...return msg 执行 redis-cli EVAL "$(cat hello.lua)" 0 执行结果 "Hello, world!"...URL简写功能,对存入的每条URL都返回一个唯一数值,以便以后通过这个数值访问到该URL 思路 使用INCR获得一个ID,以此ID为key,以url为值,存入hash表中 代码 文件名 url.lua

    1.1K50

    生成lua的静态库.动态库.lua.exe和luac.exe

    前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 “lua: attempt to yield across metamethod...于是就想使用5.2以上的版本试试;windows下没有5.2以上的版本,又不愿意使用VS编译出lua.exe;就在网上搜索下了关于使用命令行生成lua的静态库.动态库.lua.exe和luac.exe资料...:现整理如下: 将下载的lua源码解压,在src目录下 打开VC命令行提示窗口 执行如下代码即可(针对5.1): 生成~~~ 静态库: del *.obj liblua.lib cl -c -nologo...loslib.c ltablib.c lstrlib.c loadlib.c linit.c link -lib -out:liblua.lib -verbose:lib *.obj 生成~~~ 动态库:...link -link -out:lua.exe -verbose:lib *.obj Building Lua on other systems(eg:windows)原文如下: If you

    4K110

    正确lua简单的扩展,可以加速相关C++数据。

    我的程序有很多不同的lua虚拟机。每个虚拟机与一个关联C++对象,它是多线程,那么如何快速应利用这个好时机lua_State针来定位到对象指针呢?...由于在我们利用lua的过程中。lua_State这个结构指针是要贯穿全部用到lua的地方的,那么我就行对这个结构进行扩展,让它可以保存我的数据,仅仅须要保存一个指针就可以。...) */ }; 那么对这个结构扩展之后例如以下: struct lua_State { CommonHeader; lu_byte status; StkId top; /* first...) */ int __mydata;//这里 }; //同一时候添加两个lua接口,能够将函数接口放到lapi.c中,声明放到lua.h中就可以,或者你是发烧追求极限效率不在乎很多其它的扩展和更新的朋友...LUA_API void lua_setmydata(lua_State *L, int data){ L->__mydata = data; } LUA_API int lua_getmydata

    83920

    在windows程序中嵌入Lua脚本引擎--编写自己的Lua库

    在《在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统》一文中,我提到了使用Lua的ffi库,可以让我们像写C代码一样写lua程序。...看到这,可能会让想使用ffi库的朋友打起了退堂鼓。那我们如何才可以比较简洁的调用这个函数呢?那就是:编写我们自己的Lua库"fl"。          ...1 lualib.h中新增我们库的名字"fl",并声明注册我们库的函数luaopen_fl …… #define LUA_FFILIBNAME "ffi" #define LUA_FLLIBNAME...在lib_init.c中,将我们的库名字和打开库的名字banding …… { LUA_JITLIBNAME, luaopen_jit }, { LUA_FLLIBNAME, luaopen_fl...主要是实现注册我们库的luaopen_fl函数,和函数名和函数地址绑定结构体数组uaL_Reg_fl_lib #include "lua.h" #include "lauxlib.h" #include

    3.6K30

    lua脚本操作redis数据库

    前言 为什么要用lua脚本操作redis数据库?...1.减少开销–减少向redis服务器的请求次数 2.原子操作–redis将lua脚本作为一个原子执行 3.可复用–其他客户端可以使用已经执行过的lua脚本 4.增加redis灵活性–lua脚本可以帮助...script 127.0.0.1:6379> lua与redis数据类型转换 lua通过redis.call()或者redis.pcall()函数执行redis命令的返回值被转换成了lua数据结构...bulk false 从redis数据类型到lua数据类型或者从lua数据类型到redis数据类型,都有以上对应规则,但是从 从lua转换到redis有一条额外的对应规则 lua boolean true...访问一个全局变量(无论是否存在)都会引起脚本停止 总结 使用lua操作redis数据库能够带来很多便利,后续将提供实例展示lua脚本是如何操作redis数据库的.

    2.9K50

    Linux高级命令(扩展)

    Linux高级命令(扩展) 一、find命令 1、find命令作用 在Linux操作系统中,find命令主要用于进行文件的搜索。 2、基本语法 # find 搜索路径 [选项 选项的值] ......格式) # find ./ -name "*.txt" -mtime +3 案例:搜索3天以内的文件信息(只搜索.txt格式) # find ./ -name "*.txt" -mtime -3 5、扩展选项...) # find ./ -type f -size -5M 案例:搜索/目录中,文件大小大于100M的文件信息(size>100M) # find / -type f -size +100M 7、dd扩展命令...完成以上实战需要两个Linux系统,解决方案可以使用克隆操作(先关机后克隆)快速生成一个Linux系统 2、scp效果图 scp传输要求:两台计算机所使用的操作系统都必须是Linux操作系统。...4、扩展命令:date 基本语法: # date +"时间格式" %F : 年-月-日 %T : 小时:分钟:秒 %Y : Year,年 %m : month,月 %d : day,日 %H : Hour

    68810

    扩展Linux网络栈

    扩展Linux网络栈 来自Linux内核文档。之前看过这篇文章,一直好奇,问什么一条网络流会固定在一个CPU上进行处理,本文档可以解决这个疑问。为了更好地理解本文章中的功能,将这篇文章穿插入内。...简介 本文的描述了Linux网络栈中的一组补充技术,用于增加多处理器系统的并行性和提高性能。...RSS和其他扩展技术的目的是提升性能。多队列分发技术也可以按照优先级处理流量,但这不是该技术关注的内容。...驱动可以使用内核库cpu_rmap (“CPU affinity reverse map”)来生成映射。对于每个CPU,映射中相应的队列设置为最接近缓存位置的CPU的队列。...参考: Queues, RSS, interrupts and cores Linux Network Scaling: Receiving Packets Linux 网络协议栈收消息过程-Per CPU

    4.7K30

    安装python扩展库

    Python扩展库安装 Python提供了丰富的标准库(不需要安装) ,还支持大量的第三方扩展库,它们数量众多、功能强大、涉及面广、使用方便,得到各行业领域工程师的青睐。...因此熟练运用Python扩展库,可以提高软件的开发速度。 何谓模块、库、包? 一般来说, 模块是一个Python源程序文件, 库/包是一个包含若干模块并且有一个文件名为__init__.py的文件夹。...对于包含完整功能代码的单个模块,叫 作库也可以,但是一般不把库叫作模块。 Python自带的pip工具是管理扩展库的主要方式,支持Python扩展库的安装、升级和卸载等操作。...首次使用时建议升级pip为最新版本: python-m pip install --upgrade pip 注意: 扩展库之间可能有相互依赖 升级一个扩展库,可能会导致相关扩展库不能使用, 要关注版本之间的要求...有些扩展库可能需要VC环境来进行编译 建议使用国内的镜像源 安装扩展库文件名不一定和库/模块名一致 【opencv-python--->cv2】

    70710
    领券