Fermer

décembre 16, 2021

Donnez vie à vos applications avec SignalR et .NET 6


Les applications d'aujourd'hui sont censées fournir des informations à jour sans avoir besoin d'appuyer sur un bouton de mise à jour. Comment pouvons-nous rendre cela possible? Un moyen intéressant est d'utiliser SignalR.

Quelque chose de très courant dans le développement de logiciels sont des applications qui font des demandes à un serveur et attendent que le serveur traite cette demande et renvoie les données.

Mais que se passe-t-il si nous en avons besoin. données au moment exact où nous faisons une demande, comme dans un jeu par exemple, où nous ne pouvons pas avoir de retards ?

Pour répondre à ce besoin, ASP.NET Core dispose d'une technologie appelée SignalR. Dans cet article, nous allons obtenir une introduction à SignalR et créer un exemple simple qui fournira des données en temps réel à une application. Pour cela, nous utiliserons les API minimales disponibles dans .NET 6.

Qu'est-ce que SignalR ?

SignalR est une bibliothèque pour les développeurs ASP.NET qui simplifie le processus d'ajout de fonctionnalités Web en temps réel aux applications.

Avec SignalR, nous pouvons rendre le contenu du serveur disponible aux clients connectés instantanément dès qu'il devient disponible au lieu que le serveur attende qu'un client demande de nouvelles données.

SignalR est un excellent choix pour gérer les fonctionnalités Web « en temps réel » via ASP.NET . Un exemple courant de son utilisation est le développement de chats où l'utilisateur a besoin que son message soit envoyé immédiatement de la même manière qu'il le reçoit. Bien que le chat soit courant, ce n'est pas le seul exemple d'utilisation de SignalR. Les applications de surveillance, les formulaires collaboratifs et les jeux en temps réel sont également d'excellents cas d'utilisation.

Pour des informations détaillées sur SignalR, vous pouvez accéder au site Web officiel de Microsoft via ce lien : Introduction to SignalR.

Hands -on Approach

Dans cet article, nous allons créer un exemple pratique d'utilisation de SignalR de manière simple avec une API minimale disponible dans .NET 6.

Remarque : Dans ces exemples, nous utiliserons Visual Studio 2022, ainsi que le SDK .NET 6.

Si vous ne connaissez pas le concept d'API minimales, je vous suggère de jeter un œil à cet article : Low Ceremony, High Value : A Tour of Minimal APIs in .NET 6. Il fournit une excellente approche du sujet.

Vous pouvez accéder au code complet de l'exemple utilisé dans cet article via ce lien : code source.

Création du serveur

Tout d'abord, commençons créer un serveur. Alors, exécutez les commandes ci-dessous dans le terminal :

dotnet new web -o MainSignalServer
cd MainSignalServer
dotnet ajouter le package Microsoft.AspNetCore.SignalR

Avec ces commandes, nous créons notre serveur (MainSignalServer) et ajoutons le package « Microsoft.AspNetCore.SignalR » dont nous avons besoin pour implémenter SignalR sur le serveur.

Création du Hub

Un Hub permet au client et serveur pour appeler des méthodes entre elles directement. SignalR utilise un Hub au lieu de contrôleurs comme dans ASP.NET MVC. Pour cela, nous devons créer une classe qui héritera de la classe Hub.

Ainsi, au sein du projet, créez une classe appelée « MainHub » et remplacez votre code par ceci :

en utilisant Microsoft .AspNetCore.SignalR;

public class MainHub : Hub
{
    public async IAsyncEnumerable<DateTime> Streaming(CancellationToken annulation Token)[19659019659032] tandis que (true)
        {
            yield return DateTime.UtcNow;
            attend Tâche.Délai(1000, jeton d'annulation);
        }
    }
}

Pour cet exemple, nous retournons un « IAsyncEnumerable » qui est un type ajouté dans les versions plus récentes de C#. Nous passons également un paramètre « CancellationToken » qui nous permet d'annuler l'action à tout moment. Nous avons également ajouté le « rendement » afin que le client n'ait pas besoin d'une classe pour stocker l'état.

Maintenant, nous devons ajouter la configuration SignalR et créer une route vers notre serveur. Pour cela, remplacez le code de classe du programme par celui-ci :

var builder = WebApplication.CreateBuilder(args) ;
constructeur.Services.AddSignalR();

var application = constructeur.[19659040]Construire();
app.MapHub<MainHub>("/current-time");

application.Exécuter();

Notre serveur est prêt, il suffit maintenant de donner la commande ci-dessous dans le terminal et il s'exécutera.

dotnet watch run

Création du client

Créons maintenant une application simple pour consommer les informations que notre serveur fournit en temps réel.

Ensuite, dans un autre terminal, exécutez les commandes suivantes :

dotnet new console -o MainSignalClient
cd MainSignalClient
dotnet ajouter le package Microsoft.AspNetCore.SignalR.Client

Maintenant, dans le projet créé, créez une classe appelée « MainClient » et remplacez le code par le code ci-dessous :

using Microsoft.AspNetCore.SignalR .Client;

public class MainClient
{
    public static async Tâche ExécuterAsync[19659030]()
    {
        
        var uri = "https://localhost:7054/current-time";

        attente utilisation  var connection = new HubConnectionBuilder().WithUrl(uri)[19659030].Build();

        attendre connexion.DémarrerAsync();

        attendre  foreach (var date dans connexion.StreamAsync<DateTime>("Streaming"))
        {
            Console.WriteLine(date);
        }
    }
}

Dans la classe que nous avons créée, nous définissons une méthode pour consommer les données que le serveur met à disposition en temps réel Pour cela, nous créons une connexion au Hub, en passant l'URL de notre serveur, qui renvoie une liste de dates et l'affiche sur le terminal.

Il ne nous reste plus qu'à appeler cette méthode dans le programme de notre application. Remplacez donc le code de la classe Program par le code ci-dessous :

await MainClient.ExecuteAsync();

Maintenant, démarrez simplement le projet client avec cette commande dans la console et vérifiez le résultat :

 dotnet watch run

La console client affiche la date et l'heure mises à disposition par notre serveur.

Les résultats de la console client répertorient les dates et heures

Conclusion

Dans cet article, nous avons créé des exemples simples d'utilisation de SignalR et des API minimales disponibles dans .NET 6.

Nous avons créé un serveur qui met des informations en temps réel à la disposition d'une application console.

Le but de cet exemple était simplement de démontrer l'utilisation de SignalR, mais vous pouvez faire des choses incroyables. choses avec cette fonctionnalité d'ASP.NET Core. Il existe de nombreux exemples disponibles sur Internet comme des chats, des jeux et plus encore !




Source link