Sockudo provides extensive WebSocket configuration options to handle high-throughput scenarios, slow consumers, and optimize bandwidth usage.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.
Buffer Configuration (Slow Consumer Handling)
Sockudo uses bounded buffers to protect against slow consumers that can’t keep up with message delivery. This prevents unbounded memory growth.Three Buffer Limit Modes
- Message count only (default, fastest) - No size tracking overhead
- Byte size only - Precise memory control
- Both limits - Whichever triggers first (most precise)
Mode 1: Message Count Only (Default)
Mode 2: Byte Size Only
Mode 3: Both Limits
Buffer Configuration Options
Maximum number of messages buffered per connection. Set to
null or 0 to disable. Default: 1000.Maximum bytes buffered per connection. Set to
null or 0 to disable. Example: 1048576 for 1MB.When
true, disconnects slow clients when buffer is full (error code 4100). When false, drops new messages silently (logged as warning).Buffer Behavior
When a client cannot consume messages fast enough:- Messages queue up in the per-connection buffer
- Once any configured limit is reached:
- If
disconnect_on_buffer_full: true→ Connection closed with error code 4100 (client should reconnect with backoff) - If
disconnect_on_buffer_full: false→ New messages dropped silently (logged as warning)
- If
Performance Characteristics
Message-Only Mode
- Zero overhead for size tracking
- Uses bounded channel capacity
- Fastest mode
- Memory usage depends on average message size (~1-2KB typical)
Byte-Only Mode
- Atomic counter tracking (~1-2ns per message)
- Large channel capacity (10,000 messages)
- Precise memory control
- Example: 1MB byte limit per connection × 10,000 connections = ~10GB worst case
Both Modes
- Atomic counter + channel capacity check
- Most precise control
- Slight overhead from dual checking
WebSocket Connection Settings
Maximum size of a single WebSocket message in bytes (default: 64MB).
Maximum size of a single WebSocket frame in bytes (default: 16MB).
Size of the write buffer for each WebSocket connection in bytes (default: 16KB).
Maximum backpressure before applying flow control in bytes (default: 1MB).
Automatically send WebSocket ping frames to keep connections alive.
Interval between ping frames in seconds.
Idle timeout in seconds before closing inactive connections.
WebSocket per-message compression. Options:
disabled, enabled. Note: This is separate from Sockudo’s delta compression feature.Environment Variables
Payload Limits
Maximum message payload size in kilobytes. Applies to both client-to-server and server-to-client messages.
Activity Timeout
Time in seconds before marking a connection as inactive. Used for cleanup and monitoring.
Compression Settings
WebSocket Compression
Standard WebSocket per-message deflate compression:Delta Compression (Recommended)
For high-frequency updates with similar consecutive messages, use Sockudo’s built-in delta compression:Connection Limits
Limits are configured per-app in the app manager:Memory Estimation
Per-Connection Memory
Estimate memory usage based on buffer configuration:Total Memory
Best Practices
Development
- Use default message-only mode (fastest)
- Set higher limits for testing (e.g., 10,000 messages)
- Use
disconnect_on_buffer_full: falseto avoid reconnection storms - Enable debug logging to see buffer warnings
Production
- Use byte limits for predictable memory usage
- Set
disconnect_on_buffer_full: trueto protect server resources - Monitor buffer full events via metrics
- Adjust limits based on:
- Average message size
- Expected burst rates
- Available memory
- Client reconnection behavior
High-Throughput Scenarios
- Increase
max_bytesto handle bursts (e.g., 2-5MB) - Enable delta compression to reduce message sizes
- Use Redis Cluster adapter for horizontal scaling
- Monitor per-connection buffer usage via metrics
Low-Latency Requirements
- Keep buffers small to detect slow consumers quickly
- Set
disconnect_on_buffer_full: true - Enable auto-ping with short intervals (10-15 seconds)
- Monitor idle timeout and adjust based on network conditions
Monitoring
Key metrics to monitor:sockudo_websocket_connections_total- Active connectionssockudo_websocket_messages_sent_total- Messages sentsockudo_websocket_buffer_full_total- Buffer overflow eventssockudo_websocket_disconnects_total- Disconnections by reason
Troubleshooting
Slow Consumer Detection
If clients are being disconnected with error code 4100:- Check if clients are actually slow (network issues, processing delays)
- Increase buffer limits if clients have legitimate bursts
- Reduce message frequency from publishers
- Enable delta compression to reduce message sizes
- Consider using
disconnect_on_buffer_full: falseif reconnections cause issues
High Memory Usage
- Check
max_messagesandmax_bytessettings - Monitor average message size
- Reduce limits or switch to byte-only mode
- Enable delta compression
- Implement client-side throttling
Connection Drops
- Check
idle_timeoutandping_intervalsettings - Ensure clients respond to ping frames
- Monitor network conditions
- Adjust timeouts based on client behavior
Next Steps
Environment Variables
Complete reference of all configuration options
Delta Compression
Reduce bandwidth with delta compression
Monitoring
Set up Prometheus metrics