markdown

Go Realtime Chat

Realtime Chat Server (Tutorial → Full‑Featured Implementation) – A production‑ready Go backend that provides real‑time, room‑based chat with multiple adapters (HTML + Gin, REST, gRPC).

  • Goal – Turn a step‑by‑step tutorial into a complete, extensible chat service that can handle thousands of simultaneous messages with low latency.
  • Broadcast layer – Defined a Broadcaster interface (Register, Unregister, Close, Submit). Implemented a thread‑safe broadcaster using channels (input, reg, unreg, outputs) and a dedicated goroutine that selects over these channels, guaranteeing race‑free message distribution.
  • Room manager – Created a Manager interface for opening/closing listeners, submitting messages, and deleting rooms. Each room gets its own Broadcaster; the manager coordinates actions through buffered channels (open, close, delete, messages).
  • Singleton pattern – Exposed the manager via GetRoomManager(), ensuring a single shared instance across the whole application and running its run() loop in the background.
  • Adapters
    • HTML + Gin adapter – Renders a simple HTML template, registers routes for creating rooms, posting messages, deleting rooms, and streaming messages via Server‑Sent Events (SSE).
    • REST adapter (implemented) – Provides GET /stream/:roomId (SSE) and POST /submit endpoints for clients that prefer a pure JSON API.
    • gRPC adapter (optional) – Structured for future extension, exposing the same Submit and Stream RPCs.
  • Concurrency model – Pure Go channels and goroutines enable thousands of messages per second while keeping registration/unregistration race‑free and guaranteeing clean shutdowns (closed channels prevent panics).
  • Startup – A single main.go wires everything together: initializes the singleton manager, creates the Gin HTML adapter, registers all routes, and launches the server on port 8080 (router.Run(":8080")).
  • Technologies – Go 1.20, Gin‑Gonic, HTML templates, Server‑Sent Events, gRPC (planned), channels & goroutines, singleton pattern, RESTful design.
  • Result – A fully functional, production‑grade real‑time chat backend that showcases best practices for Go concurrency, clean architecture, and multi‑adapter exposure, ready to be extended with additional front‑ends or scaling layers.