sockudo 3.1.0

A simple, fast, and secure WebSocket server for real-time applications.
Documentation
{
  "debug": false,
  "host": "127.0.0.1",
  "port": 6002,
  "mode": "production",
  "path_prefix": "/",
  "shutdown_grace_period": 10,
  "websocket_max_payload_kb": 64,
  "user_authentication_timeout": 3600,
  "activity_timeout": 120,
  "unix_socket": {
    "enabled": false,
    "path": "/var/run/sockudo/sockudo.sock",
    "permission_mode": "660"
  },
  "adapter": {
    "driver": "redis",
    "redis": {
      "requests_timeout": 5000,
      "prefix": "sockudo_adapter:",
      "cluster_mode": false,
      "redis_pub_options": {
        "url": "redis://127.0.0.1:6379"
      },
      "redis_sub_options": {
        "url": "redis://127.0.0.1:6379"
      }
    },
    "cluster": {
      "nodes": [],
      "prefix": "sockudo_cluster:",
      "request_timeout_ms": 5000,
      "use_connection_manager": true
    },
    "nats": {
      "servers": ["nats://nats:4222"],
      "prefix": "sockudo_nats:",
      "request_timeout_ms": 5000,
      "connection_timeout_ms": 5000
    },
    "cluster_health": {
      "enabled": true,
      "heartbeat_interval_ms": 10000,
      "node_timeout_ms": 30000,
      "cleanup_interval_ms": 10000
    }
  },
  "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": false,
          "enabled": true,
          "max_client_events_per_second": 10000,
          "allowed_origins": ["*"]
        }
      ]
    },
    "cache": {
      "enabled": false,
      "ttl": 300
    }
  },
  "cache": {
    "driver": "redis",
    "redis": {
      "prefix": "sockudo_cache:",
      "cluster_mode": false,
      "url_override": "redis://127.0.0.1:6379"
    },
    "memory": {
      "ttl": 300,
      "cleanup_interval": 60,
      "max_capacity": 10000
    }
  },
  "database": {
    "redis": {
      "host": "127.0.0.1",
      "port": 6379,
      "db": 0,
      "key_prefix": "sockudo:",
      "sentinels": [],
      "cluster_nodes": []
    },
    "mysql": {
      "host": "mysql",
      "port": 3306,
      "username": "sockudo",
      "password": "sockudo123",
      "database": "sockudo",
      "table_name": "applications",
      "pool_min": 2,
      "pool_max": 10,
      "connection_pool_size": 10,
      "cache_ttl": 300,
      "cache_cleanup_interval": 60,
      "cache_max_capacity": 100
    },
    "postgres": {
      "host": "postgres",
      "port": 5432,
      "username": "sockudo",
      "password": "sockudo123",
      "database": "sockudo",
      "table_name": "applications",
      "pool_min": 2,
      "pool_max": 10,
      "connection_pool_size": 10,
      "cache_ttl": 300,
      "cache_cleanup_interval": 60,
      "cache_max_capacity": 100
    },
    "dynamodb": {
      "region": "us-east-1",
      "table_name": "sockudo-applications"
    }
  },
  "queue": {
    "driver": "memory",
    "redis": {
      "concurrency": 5,
      "prefix": "sockudo_queue:",
      "cluster_mode": false
    },
    "redis_cluster": {
      "concurrency": 5,
      "prefix": "sockudo_queue:",
      "nodes": [],
      "request_timeout_ms": 5000
    },
    "sqs": {
      "region": "us-east-1",
      "visibility_timeout": 30,
      "max_messages": 10,
      "wait_time_seconds": 5,
      "concurrency": 5,
      "fifo": false
    }
  },
  "rate_limiter": {
    "enabled": false,
    "driver": "memory",
    "api_rate_limit": {
      "max_requests": 10000,
      "window_seconds": 60,
      "identifier": "api",
      "trust_hops": 0
    },
    "websocket_rate_limit": {
      "max_requests": 1000,
      "window_seconds": 60,
      "identifier": "websocket_connect",
      "trust_hops": 0
    },
    "redis": {
      "prefix": "sockudo_rl:",
      "cluster_mode": false
    }
  },
  "metrics": {
    "enabled": true,
    "driver": "prometheus",
    "host": "0.0.0.0",
    "port": 9602,
    "prometheus": {
      "prefix": "sockudo_node2_"
    }
  },
  "ssl": {
    "enabled": false,
    "cert_path": "/app/ssl/cert.pem",
    "key_path": "/app/ssl/key.pem",
    "redirect_http": false,
    "http_port": 80
  },
  "cors": {
    "credentials": true,
    "origin": ["*"],
    "methods": ["GET", "POST", "OPTIONS"],
    "allowed_headers": [
      "Authorization",
      "Content-Type",
      "X-Requested-With",
      "Accept"
    ]
  },
  "channel_limits": {
    "max_name_length": 200,
    "cache_ttl": 3600
  },
  "event_limits": {
    "max_channels_at_once": 1000,
    "max_name_length": 2000,
    "max_payload_in_kb": 1000,
    "max_batch_size": 100
  },
  "presence": {
    "max_members_per_channel": 100,
    "max_member_size_in_kb": 2
  },
  "http_api": {
    "request_limit_in_mb": 10,
    "accept_traffic": {
      "memory_threshold": 0.9
    }
  },
  "webhooks": {
    "batching": {
      "enabled": false,
      "duration": 50
    }
  },
  "instance": {
    "process_id": "sockudo-node2"
  },
  "logging": {
    "colors_enabled": true,
    "include_target": true
  },
  "database_pooling": {
    "enabled": true,
    "min": 2,
    "max": 10
  },
  "cleanup": {
    "async_enabled": true,
    "fallback_to_sync": true,
    "queue_buffer_size": 50000,
    "batch_size": 25,
    "batch_timeout_ms": 50,
    "worker_threads": "auto",
    "max_retry_attempts": 2
  }
}