Expansão do SignalR com Redis

por Mike Wasson

Warning

Esta documentação não é para a versão mais recente do Signalr. Dê uma olhada ASP.NET Core signalr.

Versões de software usadas neste tópico

Versões anteriores deste tópico

Para obter informações sobre versões anteriores do Signalr, confira versões mais antigas do signalr.

Perguntas e comentários

Deixe comentários sobre como você gostou deste tutorial e o que poderíamos melhorar nos comentários na parte inferior da página. Se você tiver dúvidas que não estão diretamente relacionadas ao tutorial, poderá lançá-las no fórum do signalr ASP.net ou stackoverflow.com.

Neste tutorial, você usará o Redis para distribuir mensagens em um aplicativo signalr que é implantado em duas instâncias do IIS separadas.

Redis é um repositório de chave-valor na memória. Ele também dá suporte a um sistema de mensagens com um modelo de publicação/assinatura. O backplane Redis do Signalr usa o recurso pub/sub para encaminhar mensagens para outros servidores.

Para este tutorial, você usará três servidores:

  • Dois servidores executando o Windows, que serão usados para implantar um aplicativo Signalr.
  • Um servidor que executa o Linux, que será usado para executar o Redis. Para as capturas de tela deste tutorial, usei o Ubuntu 12, 4 TLS.

Se você não tiver três servidores físicos para usar, poderá criar VMs no Hyper-V. Outra opção é criar VMs no Azure.

Embora este tutorial use a implementação oficial do Redis, também há uma porta do Windows de Redis do MSOpenTech. A instalação e a configuração são diferentes, mas, caso contrário, as etapas são as mesmas.

Note

O dimensionamento do signalr com Redis não dá suporte a clusters Redis.

Visão geral

Antes de chegarmos ao tutorial detalhado, aqui está uma visão geral rápida do que você fará.

  1. Instale o Redis e inicie o servidor Redis.

  2. Adicione esses pacotes NuGet ao seu aplicativo:

  3. Crie um aplicativo Signalr.

  4. Adicione o seguinte código a Startup.cs para configurar o 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 no Hyper-V

Usando o Windows Hyper-V, você pode criar facilmente uma VM do Ubuntu no Windows Server.

Baixe o ISO do Ubuntu de http://www.ubuntu.com.

No Hyper-V, adicione uma nova VM. Na etapa conectar disco rígido virtual , selecione criar um disco rígido virtual.

Na etapa Opções de instalação , selecione arquivo de imagem (. ISO) , clique em procurare navegue até o ISO de instalação do Ubuntu.

Instalar o Redis

Siga as etapas em http://redis.io/download para baixar e compilar o 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

Isso cria os binários Redis no diretório src.

Por padrão, o Redis não requer uma senha. Para definir uma senha, edite o arquivo redis.conf, localizado no diretório raiz do código-fonte. (Faça uma cópia de backup do arquivo antes de editá-lo!) Adicione a seguinte diretiva a redis.conf:

requirepass YourStrongPassword1234

Agora, inicie o servidor Redis:

src/redis-server redis.conf

Abra a porta 6379, que é a porta padrão que o Redis escuta. (Você pode alterar o número da porta no arquivo de configuração.)

Criar o aplicativo Signalr

Crie um aplicativo Signalr seguindo um destes tutoriais:

Em seguida, modificaremos o aplicativo de chat para dar suporte ao ScaleOut com Redis. Primeiro, adicione o pacote NuGet Microsoft.AspNet.SignalR.StackExchangeRedis ao seu projeto. No Visual Studio, no menu ferramentas , selecione Gerenciador de pacotes NuGete, em seguida, selecione console do Gerenciador de pacotes. Na janela Console do Gerenciador de Pacotes, digite o seguinte comando:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Em seguida, abra o arquivo Startup.cs. Adicione o seguinte código ao método de configuração :

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" é o nome do servidor que está executando o Redis.
  • Port é o número da porta
  • "password" é a senha que você definiu no arquivo Redis. conf.
  • "AppName" é qualquer cadeia de caracteres. O signalr cria um Redis pub/sub Channel com esse nome.

Por exemplo:

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

Implantar e executar o aplicativo

Prepare suas instâncias do Windows Server para implantar o aplicativo Signalr.

Adicione a função IIS. Inclua recursos de "desenvolvimento de aplicativos", incluindo o protocolo WebSocket.

Inclua também o serviço de gerenciamento (listado em "ferramentas de gerenciamento").

Instale o Implantação da Web 3,0. Quando você executar o Gerenciador do IIS, ele solicitará que você instale a plataforma Web da Microsoft ou você poderá baixar o instalador. No instalador da plataforma, procure Implantação da Web e instale o Implantação da Web 3,0

Verifique se o serviço de gerenciamento da Web está em execução. Caso contrário, inicie o serviço. (Se você não vir o serviço de gerenciamento da Web na lista de serviços do Windows, certifique-se de que você instalou o serviço de gerenciamento quando adicionou a função do IIS.)

Por padrão, o serviço de gerenciamento da Web escuta na porta TCP 8172. No firewall do Windows, crie uma nova regra de entrada para permitir o tráfego TCP na porta 8172. Para obter mais informações, consulte Configurando regras de firewall. (Se você estiver hospedando as VMs no Azure, poderá fazer isso diretamente na portal do Azure. Consulte como configurar pontos de extremidade para uma máquina virtual.)

Agora você está pronto para implantar o projeto do Visual Studio do computador de desenvolvimento no servidor. Em Gerenciador de Soluções, clique com o botão direito do mouse na solução e clique em publicar.

Para obter uma documentação mais detalhada sobre a implantação da Web, consulte mapa de conteúdo de implantação da Web para Visual Studio e ASP.net.

Se você implantar o aplicativo em dois servidores, poderá abrir cada instância em uma janela separada do navegador e ver que cada uma recebe mensagens do Signalr da outra. (Naturalmente, em um ambiente de produção, os dois servidores ficam atrás de um balanceador de carga.)

Se você estiver curioso para ver as mensagens que são enviadas para o Redis, você pode usar o cliente Redis-CLI , que é instalado com o Redis.

redis-cli -a password
SUBSCRIBE ChatApp