Building a Real-Time Dashboard with Server-Sent Events

MR
Marcus Rivera
·8 min read
Building a Real-Time Dashboard with Server-Sent Events

WebSockets vs Server-Sent Events

WebSockets are bidirectional — great for chat apps. But most dashboards only need server-to-client updates. That's exactly what Server-Sent Events (SSE) provide, with less complexity.

FeatureWebSocketSSE
DirectionBidirectionalServer → Client
ReconnectionManualAutomatic
Protocolws://http://
ComplexityHighLow

Setting Up SSE in Next.js

typescript
// app/api/events/route.ts
export async function GET() {

const stream = new ReadableStream({ start(controller) { const interval = setInterval(() => { const data = JSON.stringify({ visitors: Math.floor(Math.random() * 1000), timestamp: new Date().toISOString(), }) controller.enqueue(encoder.encode(data: ${data}\n\n)) }, 1000)

return () => clearInterval(interval) }, })

return new Response(stream, { headers: { "Content-Type": "text/event-stream", "Cache-Control": "no-cache", Connection: "keep-alive", }, }) } ```

Client-Side Consumption

tsx
"use client"

export function LiveMetrics() { const [data, setData] = useState<MetricData | null>(null)

useEffect(() => { const source = new EventSource("/api/events") source.onmessage = (e) => setData(JSON.parse(e.data)) return () => source.close() }, [])

return <MetricCard value={data?.visitors ?? 0} /> } ```

Tip

EventSource automatically reconnects on network failures — no manual retry logic needed.

Production Considerations

  • Use a message broker (Redis pub/sub) for multi-instance deployments
  • Set appropriate timeouts to prevent resource leaks
  • Implement backpressure for high-frequency updates
MR
Marcus Rivera

editor

Full-stack developer and open-source contributor. Writes about Node.js, databases, and system design. Core maintainer of several popular npm packages.

Comments (1)

BT
Ben Taylor

SSE is so underrated! We replaced our WebSocket-based notifications with SSE and reduced our server complexity by 60%.

Related Posts

The Complete Guide to Next.js 16 App Router
technology12 min

The Complete Guide to Next.js 16 App Router

Everything you need to know about Next.js 16's App Router — from layouts and loading states to parallel routes and intercepting routes.

SC
Sarah Chen·
7,650