NAME

PAGI::Middleware::WebSocket::Compression - WebSocket per-message compression

SYNOPSIS

use PAGI::Middleware::Builder;

my $app = builder {
    enable 'WebSocket::Compression',
        level => 6,
        min_size => 128;
    $my_app;
};

DESCRIPTION

PAGI::Middleware::WebSocket::Compression implements per-message deflate compression (RFC 7692) for WebSocket connections. It negotiates the permessage-deflate extension and transparently compresses/decompresses messages.

CONFIGURATION

  • level (default: 6)

    Compression level (1-9). Higher = better compression, slower.

  • min_size (default: 128)

    Minimum message size to compress. Messages smaller than this are sent uncompressed.

  • server_no_context_takeover (default: 0)

    If true, don't use context takeover for server-to-client messages.

  • client_no_context_takeover (default: 0)

    If true, request client to not use context takeover.

REQUIREMENTS

This middleware requires Compress::Raw::Zlib for compression. If the module is not available, compression is disabled and messages pass through uncompressed.

EXTENSION NEGOTIATION

The middleware checks for the permessage-deflate extension in the client's Sec-WebSocket-Extensions header. If present and zlib is available, compression is enabled.

The server responds with the negotiated extension parameters in the websocket.accept event's extensions field.

SCOPE EXTENSIONS

  • pagi.websocket.compression

    Hashref containing level, min_size, and available flags.

SEE ALSO

PAGI::Middleware - Base class for middleware

PAGI::Middleware::WebSocket::Heartbeat - WebSocket keepalive

RFC 7692 - Compression Extensions for WebSocket