Activer les mises à jour automatiques dans une application web à l’aide de SignalR Service

Effectué

Application web basée sur l’interrogation.

Nous allons ensuite abandonner l’interrogation pour nous tourner vers une application qui envoie des mises à jour de données (à mesure qu’elles se produisent) aux clients connectés. Cette nouvelle conception réduit le trafic et rend une interface utilisateur plus efficace en n’effectuant les mises à jour que lorsque les données changent. Les trois technologies dont nous nous servons pour fournir cette solution mise à jour sont Azure Cosmos DB, Azure Functions et SignalR.

  • Azure Cosmos DB : Azure Cosmos DB expose un flux de modification à mesure que les données changent dans la base de données. La prise en charge du flux de modification dans Azure Cosmos DB fonctionne en écoutant les modifications apportées à un conteneur de base de données. La liste triée des documents modifiés, dans l’ordre dans lequel ils ont été modifiés, est ensuite générée. Lorsque votre application écoute le flux de modification, elle peut répondre automatiquement aux modifications de données.

  • Azure Functions : La principale différence entre cette fonction et la fonction getStocks d’origine est que la fonction est maintenant déclenchée selon les modifications apportées à nos données. Dans l’exercice précédent, nous avons déclenché la fonction selon les demandes du client et extrait toutes les données via une liaison d’entrée Azure Cosmos DB. L’utilisation du déclencheur Azure Cosmos DB rend automatiquement la récupération des données plus efficace. Azure Functions propose une liaison qui exécute du code chaque fois que des données sont mises à jour dans un flux de modification Azure Cosmos DB. Une fois qu’une fonction est à l’écoute du flux de modification, vous pouvez utiliser un sous-ensemble de vos données qui représente uniquement les modifications de données.

  • Azure SignalR : Ce service fournit une communication bidirectionnelle avec une connexion SignalR sur le client à l’écoute des diffusions SignalR provenant de l’application Azure Functions.

SignalR et les connexions permanentes

Contrairement à l’interrogation, une conception plus avantageuse propose des connexions permanentes entre le client et le serveur. L’établissement d’une connexion permanente permet au serveur d’envoyer des données au client à volonté. Le caractère à la demande de la connexion permet de réduire le trafic réseau et la charge sur le serveur. SignalR vous permet d’ajouter facilement ce type d’architecture à votre application.

SignalR est une abstraction pour une série de technologies qui permet à votre application de bénéficier d’une communication bidirectionnelle entre le client et le serveur. SignalR traite automatiquement la gestion des connexions et vous permet de diffuser des messages à tous les clients connectés simultanément, comme une salle de conversation. Vous pouvez également envoyer des messages à des clients spécifiques. La connexion entre le client et le serveur est permanente, contrairement à une connexion HTTP classique qui est rétablie pour chaque communication.

Un avantage clé de l’abstraction fournie par SignalR est la façon dont elle prend en charge les bascules de « transport ». Un transport est une méthode de communication entre le client et le serveur. Les connexions SignalR commencent par une requête HTTP standard. Quand le serveur évalue la connexion, la méthode de communication la plus appropriée (le transport) est sélectionnée. En association avec une connexion permanente au client, la fonction peut contacter des clients individuels à la demande, ce qui constitue la base pour une architecture d’application en temps réel. Les transports sont choisis en fonction des API disponibles sur le client :

  • HTML 5 : Pour les clients qui prennent en charge HTML 5, le transport de l’API WebSockets est utilisé par défaut.
  • WebSockets : Si le client ne prend pas en charge WebSockets, SignalR bascule vers la technologie Server Sent Events (également appelée EventSource).
  • Autres technologies : Pour les clients plus anciens, l’interrogation longue Ajax ou Forever Frame (Internet Explorer uniquement) est utilisé pour reproduire une connexion bidirectionnelle.

La couche d’abstraction offerte par SignalR fournit deux avantages à votre application. Le premier est la pérennité de votre application. Comme le web évolue et que des API supérieures à WebSockets deviennent disponibles, votre application n’a pas besoin de changer. Vous pouvez procéder à une mise à jour vers une version de SignalR qui prend en charge toutes les nouvelles API, sans avoir à revoir le code de votre application.

Le deuxième avantage est que SignalR permet à votre application de se dégrader de manière appropriée en fonction des technologies prises en charge du client. S’il ne prend pas en charge WebSockets, la technologie Server Sent Events est utilisée. Si le client ne peut pas gérer Server Sent Events, il utilise l’interrogation longue Ajax, et ainsi de suite.

Voyons comment utiliser SignalR pour diffuser les informations d’une fonction qui lit le flux de modification Azure Cosmos DB.