安装openresty扩展 lpack库

本文介绍了lpack包的基本概念,详细讲解了如何在OpenResty环境中安装lpack,并提供了安装后的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lpack包简介

This is a simple Lua library for packing and unpacking binary data.

可以使用lpack,定义传送数据的格式,如定义数据包头的长度,包体的长度等,然后把定义的包头和包体打包成二进制传送。

lpack的安装

rm -rf lpack
tar xfz lpack.tar.gz
cd lpack
make || exit $?
cp -rf pack.so  $WORKDIR/lualib/

lpack的使用

这里需要特别注意,文档中对lpack使用方法介绍是错的。

a :打包
require("pack")

bpack=string.pack
bunpack=string.unpack

function pbpack(msgtype, pbmsg)

    if not msgtype then
        ngx.say("pbpack unknow protobuf msg opcode:%u", msgtype)
        return nil 
    end 

    -- 使用了protobuf
    local msgbuf = protobuf.encode(msgtype, pbmsg)

    if msgbuf == nil then
        ngx.say("pbpack protobuf faild:%u", msgtype)
        return nil
    end
    -- 协议格式 
    -- 包头长度6 "<H<HAA" "H为短整型,占2个字节 A为字符串占1一个字节,一共占6个字节",当长度大于1字节需要指定模式
    -- 小端
    local bodylen = #msgbuf
    local pbtypelen = #msgtype

    -- "<" 这个是小端模式,不懂可以先行查阅一下小端模式和大端模式
    local msg = bpack("<H<HAA", bodylen, pbtypelen, msgtype, msgbuf)

    -- 打包之后 #msg 的长度 = 6 + #msgbuf 的长度
    return msg
end

b :解包
require("pack")
bpack=string.pack
bunpack=string.unpack

function pbunpack(msgbuf)
	-- 获取包体,pbtype的长度
	-- 注意返回值得对应关系,第一个返回值不是我们需要的,可以只取一部分
	-- 模式必须和打包时的模式一致
	local allszie, bodylen, pbtypelen= bunpack(msgbuf, "<H<H") 

	-- 读取字符串的时候,需要加字符串的长度
	local allszie, msglen,  bodylen, pbtype, msgbuf= bunpack(msgbuf, "<H<HA" .. pbtypelen .."A" .. bodylen)

	local pbmsg, err = protobuf.decode(pbtype, msgbuf)

	return pbtype, pbmsg
end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值