Escalabilidad horizontal de SignalR con Redis

por Mike Wasson

Warning

Esta documentación no es para la versión más reciente de Signalr. Eche un vistazo a ASP.net Core signalr.

Versiones de software utilizadas en este tema

Versiones anteriores de este tema

Para obtener información sobre las versiones anteriores de Signalr, consulte versiones anteriores de signalr.

Preguntas y comentarios

Deje comentarios sobre cómo le gustó este tutorial y lo que podríamos mejorar en los comentarios en la parte inferior de la página. Si tiene preguntas que no están directamente relacionadas con el tutorial, puede publicarlas en el foro de ASP.net signalr o stackoverflow.com.

En este tutorial, usará Redis para distribuir los mensajes a través de una aplicación signalr implementada en dos instancias de IIS independientes.

Redis es un almacén de clave-valor en memoria. También admite un sistema de mensajería con un modelo de publicación/suscripción. El backplane de ReDiS ReDiS usa la característica pub/sub para reenviar mensajes a otros servidores.

En este tutorial, usará tres servidores:

  • Dos servidores que ejecutan Windows, que se usarán para implementar una aplicación de Signalr.
  • Un servidor que ejecuta Linux, que usará para ejecutar Redis. En el caso de las capturas de pantallas de este tutorial, usé Ubuntu 12,04 TLS.

Si no tiene tres servidores físicos para usar, puede crear máquinas virtuales en Hyper-V. Otra opción es crear máquinas virtuales en Azure.

Aunque en este tutorial se usa la implementación de Redis oficial, también hay un Puerto de Windows de Redis desde MSOpenTech. La instalación y configuración son diferentes, pero, de lo contrario, los pasos son los mismos.

Note

Signalr ampliación con Redis no admite clústeres de Redis.

Información general

Antes de llegar al tutorial detallado, aquí se muestra una introducción rápida de lo que hará.

  1. Instale Redis e inicie el servidor de Redis.

  2. Agregue estos paquetes de NuGet a la aplicación:

  3. Cree una aplicación Signalr.

  4. Agregue el código siguiente a Startup.cs para configurar el 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 en Hyper-V

Con Windows Hyper-V, puede crear fácilmente una máquina virtual de Ubuntu en Windows Server.

Descargue el ISO de Ubuntu desde http://www.ubuntu.com.

En Hyper-V, agregue una nueva máquina virtual. En el paso Conectar disco duro virtual , seleccione crear un disco duro virtual.

En el paso Opciones de instalación , seleccione Archivo de imagen (. ISO) , haga clic en examinary busque el ISO de instalación de Ubuntu.

Instalación de Redis

Siga los pasos descritos en http://redis.io/download para descargar y compilar 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

Esto crea los archivos binarios de Redis en el directorio de src.

De forma predeterminada, Redis no requiere una contraseña. Para establecer una contraseña, edite el archivo de redis.conf, que se encuentra en el directorio raíz del código fuente. (Hacer una copia de seguridad del archivo antes de editarlo) Agregue la siguiente directiva a redis.conf:

requirepass YourStrongPassword1234

Ahora inicie el servidor de Redis:

src/redis-server redis.conf

Abra el puerto 6379, que es el puerto predeterminado en el que escucha Redis. (Puede cambiar el número de puerto en el archivo de configuración).

Creación de la aplicación Signalr

Cree una aplicación de Signalr siguiendo uno de estos tutoriales:

A continuación, modificaremos la aplicación de chat para admitir ampliación con Redis. En primer lugar, agregue el Microsoft.AspNet.SignalR.StackExchangeRedis paquete NuGet al proyecto. En Visual Studio, en el menú herramientas , seleccione Administrador de paquetes NuGety, a continuación, seleccione consola del administrador de paquetes. En la ventana Package Manager Console, escriba el siguiente comando:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

A continuación, abra el archivo Startup.cs. Agregue el código siguiente al método de configuración :

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();
    }
}
  • "servidor" es el nombre del servidor que ejecuta Redis.
  • Port es el número de Puerto
  • "contraseña" es la contraseña que definió en el archivo Redis. conf.
  • "AppName" es cualquier cadena. Signalr crea un canal pub/sub de Redis con este nombre.

Por ejemplo:

GlobalHost.DependencyResolver.UseStackExchangeRedis("redis-server.cloudapp.net", 6379,
    "MyStrongPassword1234", "ChatApp");

Implementación y ejecución de la aplicación

Preparar las instancias de Windows Server para implementar la aplicación Signalr.

Agregue el rol de IIS. Incluya características de "desarrollo de aplicaciones", incluido el protocolo WebSocket.

Incluya también el servicio de administración de (que aparece en "herramientas de administración").

Instale Web Deploy 3,0. Al ejecutar el administrador de IIS, se le pedirá que instale la plataforma web de Microsoft, o bien puede descargar el instalador. En el instalador de plataforma, busque Web Deploy e instale Web Deploy 3,0

Compruebe que el servicio de administración web se está ejecutando. Si no es así, inicie el servicio. (Si no ve servicio de administración web en la lista de servicios de Windows, asegúrese de que ha instalado el servicio de administración de al agregar el rol de IIS).

De forma predeterminada, el servicio de administración web escucha en el puerto TCP 8172. En firewall de Windows, cree una nueva regla de entrada para permitir el tráfico TCP en el puerto 8172. Para obtener más información, consulte configuración de reglas de Firewall. (Si hospeda las máquinas virtuales en Azure, puede hacerlo directamente en el Azure Portal. Consulte configuración de puntos de conexión en una máquina virtual).

Ahora está listo para implementar el proyecto de Visual Studio desde el equipo de desarrollo en el servidor. En Explorador de soluciones, haga clic con el botón secundario en la solución y haga clic en publicar.

Para obtener documentación más detallada sobre la implementación web, vea mapa de contenido de implementación web para Visual Studio y ASP.net.

Si implementa la aplicación en dos servidores, puede abrir cada instancia en una ventana del explorador independiente y ver que cada una de ellas recibe mensajes Signalr del otro. (Por supuesto, en un entorno de producción, los dos servidores se colocarían detrás de un equilibrador de carga).

Si tiene curiosidad por ver los mensajes que se envían a Redis, puede usar el cliente de Redis-CLI , que se instala con Redis.

redis-cli -a password
SUBSCRIBE ChatApp