Skynet第三方之:lz4压缩

JavenLaw

什么是lz4

先了解什么是lz4

LZ4是一种无损快速压缩算法,旨在提供非常高的压缩和解压缩速度。

官网:LZ4 - Extremely fast compression

GitHub:[lz4/lz4: Extremely Fast Compression algorithm (github.com)](https://github.com/HardySimpson/zlog)


为什么要使用压缩

为什么需要使用lz4是我们首选需要回答的问题

答案非常简单

​ 请求量过大:当某个时间点(例如开服)配置的请求量过大的时候,造成带宽流量的占用

​ 配置太大:当某个配置数据量太大,造成单个包超过64kb时,可能会出现效率或者其他问题

​ (这个问题不是很确定,参看《Skynet第三方之:sproto协议》)

云风的 BLOG: 为什么 skynet 提供的包协议只用 2 个字节表示包长度 (codingnow.com)


如何使用lz4压缩

使用lz4压缩和使用zlog的方式差不多,都是需要编译成so库的形式,例如

local lz4 = require "lz4"

-- 但是使用的时候,我们一般用来压缩配置
-- 大体积配置生成 lz4 压缩数据
-- 不走 proto 协议
-- 走 json 格式
-- 压缩后发送给客户端解压
--
-- 即我们需要先把配置转换为json格式
local str = json.encode(conf)
-- 然后我们在压缩配置
local e = lz4.compress(str)

最后客户段收到数据后,在lz4解压,解压完成之后,再用json把str转为lua的table,即最终的conf配置

lz4的使用效果


对于lz4的使用场景,建议对于大的配置文件才使用

对于特别小的文件,不适合,效率并没有很大的提高

在使用的时候,建议经过严格的验证和测试,最后收获的效果来决定要不要使用,值不值得