snappy: Enlaces FFI de LuaJIT para Snappy, un compresor/descompresor rápido (https://code.google.com/p/snappy/)
Instalación
Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.
CentOS/RHEL 7 o Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-snappy
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-snappy
Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.
Este documento describe lua-resty-snappy v1.0 lanzado el 01 de octubre de 2014.
lua-resty-snappy proporciona enlaces FFI de LuaJIT a Snappy, un compresor/descompresor rápido (https://code.google.com/p/snappy/).
API de Lua
Códigos de Error
SNAPPY_OK = 0,
SNAPPY_INVALID_INPUT = 1,
SNAPPY_BUFFER_TOO_SMALL = 2
string,len snappy.compress(input)
Comprime input con el algoritmo Snappy y devuelve los datos comprimidos y su longitud. En caso de error, esto devolverá nil y un código de error.
Ejemplo
local snappy = require "resty.snappy"
local comp, err = snappy.compress("test")
if comp then
-- hacer algo con los datos comprimidos y la longitud
-- (la longitud se almacena en el valor de err)...
else
if err == 1 then
print "Entrada no válida"
elseif err == 2 then
print "Buffer demasiado pequeño"
end
end
string,len snappy.uncompress(compressed)
Descomprime compressed con el algoritmo Snappy y devuelve los datos descomprimidos y su longitud. En caso de error, esto devolverá nil y un código de error.
Ejemplo
local snappy = require "resty.snappy"
local uncomp, err = snappy.uncompress(snappy.compress("test"))
number snappy.max_compressed_length(source_length)
Devuelve la longitud máxima posible como un número de bytes de datos comprimidos cuando se da la longitud source_length descomprimida. Esto se utiliza para crear un buffer para comprimir, pero también se puede usar en una medición rápida (y puede no tener nada que ver con la longitud final de salida comprimida, además de que no puede ser mayor que lo que esta función devuelve).
Ejemplo
local snappy = require "resty.snappy"
local number = snappy.max_compressed_length(1000)
number snappy.uncompressed_length(compressed)
Esta es una forma más rápida (que usar snappy.uncompress) para determinar cuántos bytes tendrá los datos comprimidos cuando se descompriman.
Ejemplo
local snappy = require "resty.snappy"
local number = snappy.uncompressed_length(snappy.compress("test"))
boolean snappy.validate_compressed_buffer(compressed)
Esto se puede usar para verificar si los bytes comprimidos son en realidad bytes comprimidos por Snappy o algo más. Es decir, algo que se puede descomprimir con Snappy.
Ejemplo
local snappy = require "resty.snappy"
local bool = snappy.validate_compressed_buffer(snappy.compress("test"))
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-snappy.