Scale-out de SignalR avec Redis
Avertissement
Cette documentation ne concerne pas la dernière version de SignalR. Consultez ASP.NET Core SignalR.
Versions logicielles utilisées dans cette rubrique
- Visual Studio 2013
- .NET 4.5
- SignalR version 2.4
Versions précédentes de cette rubrique
Pour plus d’informations sur les versions antérieures de SignalR, consultez Anciennes versions de SignalR.
Questions et commentaires
Laissez vos commentaires sur la façon dont vous avez aimé ce tutoriel et sur ce que nous pourrions améliorer dans les commentaires en bas de la page. Si vous avez des questions qui ne sont pas directement liées au tutoriel, vous pouvez les publier sur le forum ASP.NET SignalR ou StackOverflow.com.
Dans ce tutoriel, vous allez utiliser Redis pour distribuer des messages sur une application SignalR déployée sur deux instances IIS distinctes.
Redis est un magasin clé-valeur en mémoire. Il prend également en charge un système de messagerie avec un modèle de publication/abonnement. Le fond de panier Redis SignalR utilise la fonctionnalité pub/sub pour transférer des messages vers d’autres serveurs.
Pour ce tutoriel, vous allez utiliser trois serveurs :
- Deux serveurs exécutant Windows, que vous utiliserez pour déployer une application SignalR.
- Un serveur exécutant Linux, que vous utiliserez pour exécuter Redis. Pour les captures d’écran de ce tutoriel, j’ai utilisé Ubuntu 12.04 TLS.
Si vous n’avez pas trois serveurs physiques à utiliser, vous pouvez créer des machines virtuelles sur Hyper-V. Une autre option consiste à créer des machines virtuelles sur Azure.
Bien que ce tutoriel utilise l’implémentation officielle de Redis, il existe également un port Windows de Redis à partir de MSOpenTech. L’installation et la configuration sont différentes, mais sinon, les étapes sont les mêmes.
Notes
Le scaleout SignalR avec Redis ne prend pas en charge les clusters Redis.
Vue d’ensemble
Avant d’accéder au tutoriel détaillé, voici une vue d’ensemble rapide de ce que vous allez faire.
Installez Redis et démarrez le serveur Redis.
Ajoutez ces packages NuGet à votre application :
Créez une application SignalR.
Ajoutez le code suivant à Startup.cs pour configurer le backplane :
public class Startup { public void Configuration(IAppBuilder app) { // Any connection or hub wire up and configuration should go here GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName"); app.MapSignalR(); } }
Ubuntu sur Hyper-V
À l’aide de Windows Hyper-V, vous pouvez facilement créer une machine virtuelle Ubuntu sur Windows Server.
Téléchargez l’ISO Ubuntu à partir de http://www.ubuntu.com.
Dans Hyper-V, ajoutez une nouvelle machine virtuelle. À l’étape Connecter un disque dur virtuel , sélectionnez Créer un disque dur virtuel.
À l’étape Options d’installation , sélectionnez Fichier image (.iso), cliquez sur Parcourir, puis accédez à l’ISO d’installation d’Ubuntu.
Installer Redis
Suivez les étapes ci-dessous http://redis.io/download pour télécharger et générer Redis.
wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make
Cela génère les fichiers binaires Redis dans le src
répertoire.
Par défaut, Redis ne nécessite pas de mot de passe. Pour définir un mot de passe, modifiez le redis.conf
fichier, qui se trouve dans le répertoire racine du code source. (Effectuez une copie de sauvegarde du fichier avant de le modifier !) Ajoutez la directive suivante à redis.conf
:
requirepass YourStrongPassword1234
Démarrez maintenant le serveur Redis :
src/redis-server redis.conf
Ouvrez le port 6379, qui est le port par défaut sur lequel Redis écoute. (Vous pouvez modifier le numéro de port dans le fichier de configuration.)
Créer l’application SignalR
Créez une application SignalR en suivant l’un de ces tutoriels :
Ensuite, nous allons modifier l’application de conversation pour prendre en charge le scaleout avec Redis. Tout d’abord, ajoutez le Microsoft.AspNet.SignalR.StackExchangeRedis
package NuGet à votre projet. Dans Visual Studio, dans le menu Outils , sélectionnez Gestionnaire de package NuGet, puis console du gestionnaire de package. Dans la fenêtre Console du Gestionnaire de package, entrez la commande suivante :
Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis
Ensuite, ouvrez le fichier Startup.cs. Ajoutez le code suivant à la méthode Configuration :
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
app.MapSignalR();
}
}
- « server » est le nom du serveur qui exécute Redis.
- port est le numéro de port
- « password » est le mot de passe que vous avez défini dans le fichier redis.conf.
- « AppName » est n’importe quelle chaîne. SignalR crée un canal pub/sub Redis portant ce nom.
Par exemple :
GlobalHost.DependencyResolver.UseStackExchangeRedis("redis-server.cloudapp.net", 6379,
"MyStrongPassword1234", "ChatApp");
Déployer et exécuter l’application
Préparez vos instances Windows Server pour déployer l’application SignalR.
Ajoutez le rôle IIS. Incluez les fonctionnalités de développement d’applications, notamment le protocole WebSocket.
Incluez également le service de gestion (répertorié sous « Outils d’administration »).
Installez Web Deploy 3.0. Lorsque vous exécutez le Gestionnaire des services Internet, il vous invite à installer Microsoft Web Platform, ou vous pouvez télécharger le programme d’installation. Dans le programme d’installation de plateforme, recherchez Web Deploy et installez Web Deploy 3.0
Vérifiez que le service de gestion web est en cours d’exécution. Si ce n’est pas le cas, démarrez le service. (Si le service de gestion web ne figure pas dans la liste des services Windows, assurez-vous d’avoir installé le service de gestion lorsque vous avez ajouté le rôle IIS.)
Par défaut, le service de gestion web écoute sur le port TCP 8172. Dans le Pare-feu Windows, créez une règle de trafic entrant pour autoriser le trafic TCP sur le port 8172. Pour plus d’informations, consultez Configuration des règles de pare-feu. (Si vous hébergez les machines virtuelles sur Azure, vous pouvez le faire directement dans le Portail Azure. Consultez Comment configurer des points de terminaison sur une machine virtuelle.)
Vous êtes maintenant prêt à déployer le projet Visual Studio de votre ordinateur de développement sur le serveur. Dans Explorateur de solutions, cliquez avec le bouton droit sur la solution, puis cliquez sur Publier.
Pour obtenir une documentation plus détaillée sur le déploiement web, consultez Web Deployment Content Map pour Visual Studio et ASP.NET.
Si vous déployez l’application sur deux serveurs, vous pouvez ouvrir chaque instance dans une fenêtre de navigateur distincte et voir qu’ils reçoivent chacun des messages SignalR de l’autre. (Bien sûr, dans un environnement de production, les deux serveurs se trouvent derrière un équilibreur de charge.)
Si vous êtes curieux de voir les messages envoyés à Redis, vous pouvez utiliser le client redis-cli , qui s’installe avec Redis.
redis-cli -a password
SUBSCRIBE ChatApp