All posts
.NET

SignalR vs Polling: Choosing the Right Real-Time Strategy

A practical comparison of long-polling and SignalR for live updates, with guidance on when each wins.

Mar 14, 20261 min read

"Real-time" spans a huge range of needs. Before reaching for WebSockets, it's worth asking how fresh your data actually needs to be.

Polling

Polling is dead simple: the client asks for updates on an interval. It's stateless, cache-friendly, and works everywhere.

setInterval(async () => {
  const res = await fetch("/api/sections/availability");
  setSeats(await res.json());
}, 5000);

The cost is latency and wasted requests when nothing changed.

SignalR

SignalR maintains a persistent connection and pushes updates the instant they happen. It handles transport negotiation (WebSockets, SSE, long-polling) for you.

await hubContext.Clients
    .Group(sectionId)
    .SendAsync("SeatsChanged", seatsLeft);

SignalR shines when updates are frequent and low-latency matters — dashboards, chat, collaborative editing, live seat counts.

How to choose

NeedPrefer
Updates every few minutesPolling
Sub-second latencySignalR
Massive fan-out, simple infraPolling + cache
Bidirectional messagingSignalR

Takeaway

Use polling until latency or request volume hurts — then reach for SignalR. Matching the tool to the freshness requirement keeps your infrastructure simple.

Related posts

When separating reads from writes pays off, when it doesn't, and how to adopt CQRS incrementally.

May 2, 2026

How to apply Clean Architecture pragmatically in ASP.NET Core — the boundaries that matter and the ones you can skip.

Jun 18, 2026