Sockudo
A high-performance, scalable WebSocket server implementing the Pusher protocol in Rust.
Star History
Features
- π High Performance - Handle 100K+ concurrent connections
- π Pusher Compatible - Drop-in replacement for Pusher services
- ποΈ Scalable Architecture - Redis, Redis Cluster, NATS adapters
- π‘οΈ Production Ready - Rate limiting, SSL/TLS, metrics
- β‘ Async Cleanup - Non-blocking disconnect handling
- π Real-time Metrics - Prometheus integration
Quick Start
Docker (Recommended)
# Clone and start with Docker Compose
# Server runs on http://localhost:6001
# Metrics on http://localhost:9601/metrics
From Source
# Install Rust (if not already installed)
|
# Build and run
# Fast local development build (default - no external dependencies)
# Production build with all features
Feature Flags
Sockudo supports optional compilation of backends to speed up local development:
# Local development (fastest - default)
# With specific backends
# Full production build
Available Features:
local(default) - In-memory implementations onlyredis- Redis adapter, cache, queue, rate limiterredis-cluster- Redis Cluster supportnats- NATS adaptermysql/postgres/dynamodb- Database backendssqs/lambda- AWS integrationsfull- All features enabled
Basic Usage
Connect using any Pusher-compatible client:
import Pusher from 'pusher-js';
const pusher = ;
const channel = pusher.;
channel.;
Configuration
Environment Variables
# Basic settings
PORT=6001
HOST=0.0.0.0
DEBUG=false
# Default app credentials
SOCKUDO_DEFAULT_APP_ID=app-id
SOCKUDO_DEFAULT_APP_KEY=app-key
SOCKUDO_DEFAULT_APP_SECRET=app-secret
# Scaling drivers
ADAPTER_DRIVER=redis # local, redis, redis-cluster, nats
CACHE_DRIVER=redis # memory, redis, redis-cluster, none
QUEUE_DRIVER=redis # memory, redis, redis-cluster, sqs, none
Performance Tuning
# Connection limits
SOCKUDO_DEFAULT_APP_MAX_CONNECTIONS=100000
SOCKUDO_DEFAULT_APP_MAX_CLIENT_EVENTS_PER_SECOND=10000
# Cleanup performance (for handling mass disconnects)
CLEANUP_QUEUE_BUFFER_SIZE=50000
CLEANUP_BATCH_SIZE=25
CLEANUP_WORKER_THREADS=auto
# CPU scaling
ADAPTER_BUFFER_MULTIPLIER_PER_CPU=128
Database Pooling
- Global defaults (apply to all SQL DBs unless overridden):
DATABASE_POOLING_ENABLED=true
DATABASE_POOL_MIN=2
DATABASE_POOL_MAX=10
# Legacy cap if pooling disabled
DATABASE_CONNECTION_POOL_SIZE=10
- Perβdatabase overrides (take precedence over global when set):
# MySQL
DATABASE_MYSQL_POOL_MIN=4
DATABASE_MYSQL_POOL_MAX=32
# PostgreSQL
DATABASE_POSTGRES_POOL_MIN=2
DATABASE_POSTGRES_POOL_MAX=16
- config/config.json keys:
Behavior:
- When
database_pooling.enabledis true, managers use perβDBpool_min/pool_maxif provided; otherwise they fall back to the globaldatabase_pooling.min/max. - When disabled, managers use
connection_pool_sizeas the max connections for backward compatibility.
Deployment Scenarios
| Scenario | CPU/RAM | Adapter | Cache | Queue | Max Connections |
|---|---|---|---|---|---|
| Development | 1vCPU/1GB | local | memory | memory | 1K |
| Small Production | 2vCPU/2GB | redis | redis | redis | 10K |
| High Traffic | 4vCPU/4GB+ | redis | redis | redis | 50K+ |
| Multi-Region | 8vCPU/8GB+ | redis-cluster | redis-cluster | redis-cluster | 100K+ |
Architecture
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Load Balancer ββββββ Sockudo Node ββββββ Redis Cluster β
β (Nginx) β β (Rust/Tokio) β β (State Store) β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β β
β βββββββββββββββββββ β
ββββββββββββββββ Sockudo Node βββββββββββββββ
β (Rust/Tokio) β
βββββββββββββββββββ
Documentation
- Full Documentation - Complete setup and configuration guide
- Performance Tuning - Optimize for your workload
- Docker Deployment - Production-ready containers
- API Reference - WebSocket and HTTP API details
Testing
# Run all tests
# Interactive WebSocket testing
&& &&
# Open http://localhost:3000
# Load testing
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
Licensed under the MIT License.
Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: sockudo.app
- Discord: Join our Discord
- X: @sockudorealtime
- Email: sockudorealtime