Hubs et connexions SignalR
Créez un hub SignalR, mappez-le dans ASP.NET Core et établissez des connexions WebSocket depuis des clients JavaScript et .NET.
Hubs et connexions SignalR est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.
Qu’est-ce que SignalR ?
SignalR est une bibliothèque ASP.NET Core qui ajoute une communication bidirectionnelle en temps réel entre le serveur et les clients. Elle choisit automatiquement le meilleur transport — WebSockets, événements envoyés par le serveur ou interrogation longue — selon ce que les deux parties prennent en charge.
Configurer SignalR
Ajoutez SignalR aux services et mappez un point de terminaison de hub. Un hub est une classe qui gère les connexions client et les appels de méthodes.
builder.Services.AddSignalR();
var app = builder.Build();
app.UseCors("AllowAll");
app.MapHub<ChatHub>("/hubs/chat");
app.Run();Créer un hub
Héritez de Hub. Les méthodes du hub sont appelées par les clients. La propriété Context fournit les informations de connexion, et Clients vous permet de renvoyer des messages.
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
// Broadcast to ALL connected clients
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
public override async Task OnConnectedAsync()
{
await Clients.Caller.SendAsync("Welcome",
$"Connected as {Context.ConnectionId}");
await base.OnConnectedAsync();
}
}Client JavaScript
Le client JavaScript officiel de SignalR établit une connexion, enregistre des gestionnaires d’événements et démarre la connexion. Les méthodes définies sur le hub peuvent être appelées depuis JavaScript.
// npm install @microsoft/signalr
import * as signalR from "@microsoft/signalr";
const connection = new signalR.HubConnectionBuilder()
.withUrl("/hubs/chat")
.withAutomaticReconnect()
.build();
connection.on("ReceiveMessage", (user, message) => {
console.log(`${user}: ${message}`);
});
await connection.start();
await connection.invoke("SendMessage", "Alice", "Hello!");Client SignalR .NET
Le client .NET fonctionne de la même manière — il est utile pour la communication en temps réel de service à service ou pour les applications de bureau et mobiles.
// dotnet add package Microsoft.AspNetCore.SignalR.Client
var connection = new HubConnectionBuilder()
.WithUrl("https://myapp.com/hubs/chat")
.WithAutomaticReconnect()
.Build();
connection.On<string, string>("ReceiveMessage", (user, msg) =>
Console.WriteLine($"{user}: {msg}"));
await connection.StartAsync();
await connection.InvokeAsync("SendMessage", "Bot", "Connected!");Envoyer des messages à des clients précis
La propriété Clients possède des méthodes permettant de cibler des connexions précises, les appelants ou tous les clients connectés à l’exception de ceux qui sont indiqués.
// To the caller only
await Clients.Caller.SendAsync("YouSaid", message);
// To a specific connection
await Clients.Client(connectionId).SendAsync("PrivateMsg", msg);
// To all except caller
await Clients.Others.SendAsync("ReceiveMessage", user, message);
// To multiple specific connections
await Clients.Clients(new[] { id1, id2 })
.SendAsync("DirectMsg", msg);Contexte du hub : envoyer des messages depuis l’extérieur du hub
Injectez IHubContext<T> dans des services ou des tâches d’arrière-plan pour envoyer des messages depuis l’extérieur de la classe du hub — ce qui est essentiel pour les transmissions initiées par le serveur.
public class NotificationService
{
private readonly IHubContext<ChatHub> _hub;
public NotificationService(IHubContext<ChatHub> hub) => _hub = hub;
public async Task BroadcastAlertAsync(string alert)
{
// Send to all clients from a background service
await _hub.Clients.All.SendAsync("SystemAlert", alert);
}
}Événements du cycle de vie des connexions
Remplacez OnConnectedAsync et OnDisconnectedAsync pour suivre les connexions, conserver l’état ou libérer les ressources.
public override async Task OnConnectedAsync()
{
_connections.TryAdd(Context.ConnectionId, GetUserName());
await Clients.All.SendAsync("UserJoined", GetUserName());
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception? ex)
{
_connections.TryRemove(Context.ConnectionId, out var user);
await Clients.All.SendAsync("UserLeft", user);
await base.OnDisconnectedAsync(ex);
}
private string GetUserName() =>
Context.User?.Identity?.Name ?? Context.ConnectionId;Reconnexion automatique
Activez la reconnexion automatique côté client pour gérer élégamment les déconnexions temporaires. Vous pouvez personnaliser les délais de nouvelle tentative.
// JavaScript client
const conn = new signalR.HubConnectionBuilder()
.withUrl("/hubs/chat")
.withAutomaticReconnect([0, 2000, 5000, 10000, 30000]) // retry delays in ms
.build();
conn.onreconnecting(err => console.warn("Reconnecting...", err));
conn.onreconnected(id => console.log("Reconnected:", id));
conn.onclose(err => console.error("Disconnected:", err));Authentification avec SignalR
SignalR respecte l’intergiciel d’authentification ASP.NET Core. Ajoutez [Authorize] à la classe du hub ou utilisez le handler JWT qui prend en charge les jetons dans la chaîne de requête (nécessaires à l’authentification WebSocket).
[Authorize]
public class PrivateHub : Hub
{
public Task SendMessage(string msg)
{
var user = Context.User!.Identity!.Name;
return Clients.All.SendAsync("Msg", user, msg);
}
}
// JWT via query string (WebSocket requirement):
builder.Services.AddAuthentication().AddJwtBearer(opt =>
{
opt.Events = new JwtBearerEvents
{
OnMessageReceived = ctx =>
{
var token = ctx.Request.Query["access_token"];
if (!string.IsNullOrEmpty(token))
ctx.Token = token;
return Task.CompletedTask;
}
};
});Vérification rapide
Comment envoyer un message SignalR depuis un service d’arrière-plan (en dehors de la classe du hub) ?
Récapitulatif : hubs et connexions SignalR
Points clés à retenir :
- SignalR choisit automatiquement le meilleur transport (WebSockets, SSE, interrogation longue)
- Les méthodes du hub peuvent être appelées par les clients ;
Clients.*cible des destinataires précis - Injectez
IHubContext<T>pour envoyer des messages depuis l’extérieur du hub - Remplacez
OnConnectedAsync/OnDisconnectedAsyncpour gérer le cycle de vie - Utilisez
withAutomaticReconnect()pour des connexions client résilientes - L’authentification JWT via la chaîne de requête est requise pour les connexions WebSocket
Apprends C# avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 93
- Leçons
- 346
Questions Fréquemment Posées
La leçon « Hubs et connexions SignalR » est-elle gratuite ?
Oui — le texte complet de « Hubs et connexions SignalR » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Hubs et connexions SignalR » ?
Créez un hub SignalR, mappez-le dans ASP.NET Core et établissez des connexions WebSocket depuis des clients JavaScript et .NET. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Hubs et connexions SignalR » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Hubs et connexions SignalR
- Groupes, utilisateurs et gestion des connexions
- Hubs fortement typés
- Mise à l’échelle avec un relais Redis