Skip to content

Main - #220

Closed
levibliz wants to merge 10 commits into
devfrom
main
Closed

Main#220
levibliz wants to merge 10 commits into
devfrom
main

Conversation

@levibliz

Copy link
Copy Markdown
Contributor

No description provided.

bokkykennedy79-spec and others added 10 commits July 22, 2026 16:20
…cs, and WebSocket upgrade detection on shared port

Implement an HTTP server as the primary listener using Node.js built-in http
module, with WebSocketServer running in noServer: true mode. Incoming requests
are inspected for the Upgrade header to correctly route WebSocket upgrades vs
plain HTTP requests.

Endpoints:
- GET /healthz: Liveness probe returning 200 with uptime (503 during shutdown)
- GET /readyz: Readiness probe returning 200 with connection/room counts
- GET /metrics: Prometheus exposition format with 7 metrics (connections,
  rooms, messages, rate limit rejections, auth failures, heap usage, event
  loop lag)

Features:
- Protocol detection on shared port (HTTP vs WebSocket upgrade)
- Event loop lag measurement via setTimeout(0) drift every 5 seconds
- Atomic metrics counters for message types, auth failures, and rate limits
- Graceful shutdown integration: markShuttingDown sets probes to 503, then
  closes both WSS and HTTP server
- wss.address() patched to return httpServer.address() for test compatibility

Closes #199
feat: Co-located HTTP server with health checks, Prometheus metrics, and WebSocket upgrade detection (#199)
…ain queues

- Add backpressure options to RoomManager constructor (opt-in)
- Batch broadcasts using setImmediate to prevent event loop starvation
- Detect slow consumers via ws.bufferedAmount high water mark
- Coalesce location_update messages for slow consumers
- Auto-terminate slow consumers after configurable timeout
- Add getRoomStats() for observability (queue depths, slow consumers)
- Clean up slow consumer state on disconnect (no memory leaks)
- All existing tests pass unchanged (backward compatible)

Closes #734
Closes #733
- Remove duplicate wss and httpServer declarations causing SyntaxError
- Merge two scrambled implementations into single coherent createServer
- Add /health and /healthz endpoints returning JSON responses
- Add /readyz readiness endpoint with connection/room counts
- Add /metrics Prometheus endpoint tracking connections, messages, auth
- Add markShuttingDown() for graceful shutdown support
- Restore safeSend wrapper for error-safe WebSocket sends
- Restore per-message rate limiting via createRateLimiter import
- Fix clearInterval referencing undefined 'interval' variable
- Add per-IP connection count tracking with configurable max
- Return { wss, httpServer, rooms, markShuttingDown }
- All 178 tests pass, lint clean

Closes #191
…sure

feat: backpressure-aware async broadcast with per-client drain queues
fix: reconstruct corrupted server.js message pipeline
@levibliz levibliz closed this Jul 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants