feat(socket): add configurable maxListeners to prevent memory leaks

Based on RSocket's battle-tested configuration:

- Add maxWebSocketListeners config option (default: 20)
  - 8 base WS events + 10 dynamic listeners + 2 buffer slots
- Add maxSocketClientListeners config option (default: 50)
- Replace dangerous setMaxListeners(0) with configurable limits
- Add warning log if user explicitly sets limit to 0

BREAKING: Previous behavior used setMaxListeners(0) which removed
all limits. Now defaults to safe limits but can be overridden via config.
This commit is contained in:
Claude
2026-01-20 05:19:22 +00:00
parent 682b62acbf
commit 6f75e5ac21
4 changed files with 34 additions and 3 deletions
+15
View File
@@ -165,4 +165,19 @@ export type SocketConfig = {
/** Circuit breaker configuration for message operations */
messageCircuitBreaker?: Partial<CircuitBreakerOptions>
// === Listener Limits (Memory Leak Prevention) ===
/**
* Max WebSocket event listeners (default: 20)
* Calculated as: 8 base WS events + 10 dynamic listeners + 2 buffer slots
* WARNING: Setting to 0 disables limit and allows potential memory leaks!
*/
maxWebSocketListeners?: number
/**
* Max SocketClient event listeners (default: 50)
* WARNING: Setting to 0 disables limit and allows potential memory leaks!
*/
maxSocketClientListeners?: number
}