Polling vs. SignalR: A Detailed Comparison

 Polling vs. SignalR: A Detailed Comparison

Both Polling and SignalR are techniques used to fetch or receive real-time updates from a server, but they work differently. Here’s a comprehensive comparison to help you choose the right approach.


1. Overview


2. How They Work

Polling

  • The client repeatedly sends requests at fixed intervals (e.g., every 5 seconds).
  • The server responds with data (whether there are changes or not).
  • If no new data, the response is wasted network traffic.

🔹 Example (Polling in .NET Core)

public async Task<List<Message>> PollMessagesAsync()
{
    using var httpClient = new HttpClient();
    var response = await httpClient.GetAsync("https://api.example.com/messages");
    return await response.Content.ReadAsAsync<List<Message>>();
}

Problem: If data updates once every minute, but polling occurs every 5 seconds, that’s 11 wasted requests before useful data arrives.


SignalR

  • The client establishes a persistent connection with the server.
  • The server pushes updates to the client only when new data is available.
  • Uses WebSockets (or falls back to Server-Sent Events or Long Polling if WebSockets isn’t supported).

🔹 Example (SignalR in .NET Core)

1️⃣ Server-Side (Hub)

using Microsoft.AspNetCore.SignalR;

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

2️⃣ Client-Side (JavaScript)

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub")
    .build();

connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user}: ${message}`);
});

await connection.start();
console.log("Connected to SignalR");

Advantage: Updates instantly when new messages arrive—no need for repeated requests.


3. Performance Comparison


4. When to Use Polling vs. SignalR


5. Example: Polling vs. SignalR in a Live Chat App

Polling Approach

  • The client requests new messages every 5 seconds.
  • If no messages exist, the server still sends an empty response.
  • Inefficient when chat activity is low.

🔹 Example (Polling)

public async Task<List<Message>> PollChatMessagesAsync()
{
    using var httpClient = new HttpClient();
    var response = await httpClient.GetAsync("https://api.example.com/chat/messages");
    return await response.Content.ReadAsAsync<List<Message>>();
}

SignalR Approach

  • The client stays connected.
  • When a user sends a message, the server immediately pushes it to all clients.

🔹 Example (SignalR)

1️⃣ Server-Side (ChatHub)

public class ChatHub : Hub
{
    public async Task SendMessage(string user, string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", user, message);
    }
}

2️⃣ Client-Side (JavaScript)

const connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub")
    .build();

connection.on("ReceiveMessage", (user, message) => {
    console.log(`${user}: ${message}`);
});

await connection.start();
console.log("Connected to SignalR");

Benefit: Chat messages are delivered instantly.


6. Which One Should You Use?


7. Conclusion


Final Recommendation

If real-time performance and efficiency are important, SignalR is the best choice. If updates are rare and you don’t want to manage WebSockets, polling is acceptable.

Comments

Popular posts from this blog

Maxpooling vs minpooling vs average pooling

Understand the Softmax Function in Minutes

Percentiles, Deciles, and Quartiles