Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/sockudo/sockudo/llms.txt

Use this file to discover all available pages before exploring further.

Sockudo uses pluggable backends for application management, caching, and queue processing. This allows you to choose the right storage solution for your infrastructure.

Backend Types

Sockudo has three types of backends:
  1. App Manager - Stores application credentials and configuration
  2. Cache - Caches frequently accessed data (app configs, rate limits)
  3. Queue - Processes background jobs (webhooks, batched events)

App Manager

The app manager stores application credentials, API keys, and per-app configuration.

Available Drivers

Memory

In-memory storage from config file. Fast but not persistent.

MySQL

MySQL/MariaDB persistent storage.

PostgreSQL

PostgreSQL persistent storage.

DynamoDB

AWS DynamoDB serverless storage.

ScyllaDB

ScyllaDB high-performance storage.

Memory App Manager

The memory app manager loads applications from your config file. It’s suitable for:
  • Development and testing
  • Single-app deployments with static configuration
  • Scenarios where app config rarely changes

Configuration

{
  "app_manager": {
    "driver": "memory",
    "array": {
      "apps": [
        {
          "id": "app-id",
          "key": "app-key",
          "secret": "app-secret",
          "max_connections": 100000,
          "enable_client_messages": true,
          "enable_user_authentication": true,
          "enabled": true,
          "max_client_events_per_second": 1000,
          "allowed_origins": ["*"]
        }
      ]
    },
    "cache": {
      "enabled": false,
      "ttl": 300
    }
  }
}

Environment Variables

APP_MANAGER_DRIVER=memory
SOCKUDO_DEFAULT_APP_ID=demo-app
SOCKUDO_DEFAULT_APP_KEY=demo-key
SOCKUDO_DEFAULT_APP_SECRET=demo-secret
SOCKUDO_DEFAULT_APP_ENABLED=true
SOCKUDO_DEFAULT_APP_MAX_CONNECTIONS=1000
SOCKUDO_DEFAULT_APP_ALLOWED_ORIGINS=https://app.example.com,*.staging.example.com

MySQL App Manager

Store applications in MySQL for persistent, shared configuration across multiple Sockudo instances.

Configuration

{
  "app_manager": {
    "driver": "mysql"
  },
  "database": {
    "mysql": {
      "host": "mysql",
      "port": 3306,
      "username": "sockudo",
      "password": "secret",
      "database": "sockudo",
      "table_name": "applications",
      "pool_min": 2,
      "pool_max": 10
    }
  }
}

Environment Variables

APP_MANAGER_DRIVER=mysql
DATABASE_MYSQL_HOST=mysql
DATABASE_MYSQL_PORT=3306
DATABASE_MYSQL_USERNAME=sockudo
DATABASE_MYSQL_PASSWORD=secret
DATABASE_MYSQL_DATABASE=sockudo
DATABASE_MYSQL_TABLE_NAME=applications
DATABASE_MYSQL_POOL_MIN=2
DATABASE_MYSQL_POOL_MAX=10
database.mysql.host
string
required
MySQL server hostname.
database.mysql.port
number
default:"3306"
MySQL server port.
database.mysql.username
string
required
MySQL username.
database.mysql.password
string
required
MySQL password.
database.mysql.database
string
required
MySQL database name.
database.mysql.table_name
string
default:"applications"
Table name for storing application data.
database.mysql.pool_min
number
default:"2"
Minimum connection pool size.
database.mysql.pool_max
number
default:"10"
Maximum connection pool size.

PostgreSQL App Manager

Configuration

APP_MANAGER_DRIVER=postgresql
DATABASE_POSTGRES_HOST=postgres
DATABASE_POSTGRES_PORT=5432
DATABASE_POSTGRES_USERNAME=sockudo
DATABASE_POSTGRES_PASSWORD=secret
DATABASE_POSTGRES_DATABASE=sockudo
DATABASE_POSTGRES_POOL_MIN=2
DATABASE_POSTGRES_POOL_MAX=10

DynamoDB App Manager

AWS DynamoDB provides serverless, scalable application storage.

Configuration

APP_MANAGER_DRIVER=dynamodb
DATABASE_DYNAMODB_REGION=us-east-1
DATABASE_DYNAMODB_TABLE_NAME=sockudo-applications
DATABASE_DYNAMODB_ENDPOINT_URL=http://localstack:4566  # For local testing
AWS_ACCESS_KEY_ID=your-access-key
AWS_SECRET_ACCESS_KEY=your-secret-key
DATABASE_DYNAMODB_REGION
string
required
AWS region for DynamoDB.
DATABASE_DYNAMODB_TABLE_NAME
string
required
DynamoDB table name.
DATABASE_DYNAMODB_ENDPOINT_URL
string
Custom endpoint URL (for LocalStack or VPC endpoints).

App Manager Cache

Enable caching of app configurations to reduce database load:
{
  "app_manager": {
    "cache": {
      "enabled": true,
      "ttl": 300
    }
  }
}
app_manager.cache.enabled
boolean
default:"false"
Enable caching of app configurations.
app_manager.cache.ttl
number
default:"300"
Cache TTL in seconds (5 minutes by default).

Cache Backend

The cache backend stores frequently accessed data like app configurations, rate limit counters, and channel metadata.

Available Drivers

  • memory - In-memory LRU cache (single instance only)
  • redis - Redis cache (supports horizontal scaling)
  • redis-cluster - Redis Cluster cache
  • none - Disable caching

Memory Cache

{
  "cache": {
    "driver": "memory",
    "memory": {
      "ttl": 300,
      "cleanup_interval": 60,
      "max_capacity": 10000
    }
  }
}
cache.memory.ttl
number
default:"300"
Default TTL for cached items in seconds.
cache.memory.cleanup_interval
number
default:"60"
Interval for cleaning up expired cache entries in seconds.
cache.memory.max_capacity
number
default:"10000"
Maximum number of items to store in cache before evicting least recently used.

Redis Cache

CACHE_DRIVER=redis
CACHE_TTL_SECONDS=300

# Uses same Redis configuration as adapter
DATABASE_REDIS_HOST=localhost
DATABASE_REDIS_PORT=6379
DATABASE_REDIS_PASSWORD=secret

Redis Cluster Cache

CACHE_DRIVER=redis-cluster
CACHE_TTL_SECONDS=300

# Uses Redis Cluster configuration
REDIS_CLUSTER_NODES=redis-1:7000,redis-2:7001,redis-3:7002

Queue Backend

The queue backend processes background jobs like webhook delivery and batched event processing.

Available Drivers

  • memory - In-memory queue (single instance, not persistent)
  • redis - Redis-backed queue (persistent, supports horizontal scaling)
  • redis-cluster - Redis Cluster queue
  • sqs - AWS SQS queue (serverless, highly scalable)
  • none - Disable queue processing

Memory Queue

{
  "queue": {
    "driver": "memory"
  }
}
Simple, fast, but jobs are lost on restart.

Redis Queue

{
  "queue": {
    "driver": "redis"
  }
}
QUEUE_DRIVER=redis
QUEUE_REDIS_CONCURRENCY=5
QUEUE_REDIS_PREFIX=sockudo_queue:
QUEUE_REDIS_CONCURRENCY
number
default:"5"
Number of concurrent queue workers.
QUEUE_REDIS_PREFIX
string
default:"sockudo_queue:"
Redis key prefix for queue data.

Redis Cluster Queue

QUEUE_DRIVER=redis-cluster
REDIS_CLUSTER_QUEUE_CONCURRENCY=5
REDIS_CLUSTER_QUEUE_PREFIX=sockudo_queue:

AWS SQS Queue

QUEUE_DRIVER=sqs
QUEUE_SQS_REGION=us-east-1
QUEUE_SQS_VISIBILITY_TIMEOUT=30
QUEUE_SQS_MAX_MESSAGES=10
QUEUE_SQS_WAIT_TIME_SECONDS=5
QUEUE_SQS_CONCURRENCY=5
QUEUE_SQS_FIFO=false
QUEUE_SQS_ENDPOINT_URL=http://localstack:4566  # For local testing

# AWS credentials
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
QUEUE_SQS_REGION
string
required
AWS region for SQS.
QUEUE_SQS_VISIBILITY_TIMEOUT
number
default:"30"
Message visibility timeout in seconds.
QUEUE_SQS_MAX_MESSAGES
number
default:"10"
Maximum messages to receive per batch.
QUEUE_SQS_WAIT_TIME_SECONDS
number
default:"5"
Long polling wait time in seconds.
QUEUE_SQS_CONCURRENCY
number
default:"5"
Number of concurrent SQS workers.
QUEUE_SQS_FIFO
boolean
default:"false"
Use FIFO queue (guarantees message order).

Rate Limiter Backend

The rate limiter tracks API request counts to enforce rate limits.
RATE_LIMITER_ENABLED=true
RATE_LIMITER_DRIVER=redis  # memory, redis, redis-cluster

# API rate limits
RATE_LIMITER_API_MAX_REQUESTS=100
RATE_LIMITER_API_WINDOW_SECONDS=60
RATE_LIMITER_API_TRUST_HOPS=0

# WebSocket rate limits
RATE_LIMITER_WS_MAX_REQUESTS=20
RATE_LIMITER_WS_WINDOW_SECONDS=60
RATE_LIMITER_ENABLED
boolean
default:"false"
Enable rate limiting.
RATE_LIMITER_DRIVER
string
default:"memory"
Backend driver: memory, redis, or redis-cluster.
RATE_LIMITER_API_MAX_REQUESTS
number
default:"100"
Maximum API requests per window.
RATE_LIMITER_API_WINDOW_SECONDS
number
default:"60"
Rate limit window in seconds.
RATE_LIMITER_API_TRUST_HOPS
number
default:"0"
Number of reverse proxy hops to trust for client IP detection.

Feature Compilation

Backends must be compiled into the binary. Use Cargo features:
# Local only (memory drivers)
cargo build --release

# With Redis
cargo build --release --features "local,redis"

# With MySQL
cargo build --release --features "local,mysql"

# With PostgreSQL and Redis Cluster
cargo build --release --features "local,postgres,redis-cluster"

# With AWS services (DynamoDB, SQS)
cargo build --release --features "local,dynamodb,sqs"

# All backends
cargo build --release --features full

Connection Pooling

Database connections use pooling for optimal performance:
DATABASE_CONNECTION_POOL_SIZE=10
DATABASE_POOLING_ENABLED=true
DATABASE_POOL_MIN=2
DATABASE_POOL_MAX=10
DATABASE_POOL_MIN
number
default:"2"
Minimum connections to maintain in pool.
DATABASE_POOL_MAX
number
default:"10"
Maximum connections in pool.

Best Practices

Development

  • Use memory drivers for fastest setup
  • Use Docker Compose for local Redis/MySQL
  • Enable caching with short TTLs for quick iteration

Production

  • Use persistent storage (MySQL, PostgreSQL, DynamoDB) for app manager
  • Use Redis/Redis Cluster for cache and queue in multi-instance deployments
  • Enable app manager caching to reduce database load
  • Configure connection pooling based on expected load
  • Use SQS for queue in AWS environments (serverless, auto-scaling)
  • Enable rate limiting with Redis backend for accurate limits across instances

High Availability

  • Use Redis Sentinel or Redis Cluster for cache/queue
  • Use database replication for app manager
  • Configure appropriate retry policies for queue workers
  • Monitor queue depth and processing latency

Next Steps

SSL/TLS Configuration

Enable HTTPS with certificates

WebSocket Settings

Configure connection buffers and limits