Expansão do SignalR com Redis

Aviso

Esta documentação não é para a versão mais recente do SignalR. Dê uma olhada em 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, consulte 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á postá-las no fórum do ASP.NET SignalR ou StackOverflow.com.

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

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

Diagrama que mostra setas indo do Servidor Redis para v m e, em seguida, para computadores. Uma seta rotulada Publicar vai do VM para o Servidor Redis.

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

  • Dois servidores que executam o Windows, que você usará para implantar um aplicativo SignalR.
  • Um servidor que executa o Linux, que você usará para executar o Redis. Para as capturas de tela deste tutorial, usei o Ubuntu 12.04 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 do Redis da MSOpenTech. A instalação e a configuração são diferentes, mas, caso contrário, as etapas são as mesmas.

Observação

A expansão 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 estes 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, selecioneCriar um disco rígido virtual.

Captura de tela que mostra a caixa de diálogo Assistente para Nova Máquina Virtual. Conectar Disco Rígido Virtual e Criar um disco rígido virtual estão selecionados.

Na etapa Opções de Instalação , selecione Arquivo de imagem (.iso),clique em Procurar e navegue até o ISO de instalação do Ubuntu.

Captura de tela que mostra o Assistente de Nova Máquina Virtual na página Opções de Instalação. Instale um O S de uma ROM do CDD V D de inicialização e o ponto de arquivo de imagem is o estão selecionados.

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 compila os binários do Redis no src diretório .

Por padrão, o Redis não requer uma senha. Para definir uma senha, edite o redis.conf arquivo, que está 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

Captura de tela que mostra a página main do servidor Redis.

Abra a porta 6379, que é a porta padrão na qual 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 à expansão com o Redis. Primeiro, adicione o Microsoft.AspNet.SignalR.StackExchangeRedis pacote NuGet ao seu projeto. No Visual Studio, no menu Ferramentas , selecione Gerenciador de Pacotes NuGet e, 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 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" é 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 canal pub/sub do Redis 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 do IIS. Inclua recursos de "Desenvolvimento de Aplicativos", incluindo o Protocolo WebSocket.

Captura de tela que mostra o Assistente para Adicionar Funções e Recursos. As Funções de Servidor e o Protocolo WebSocket estão selecionados.

Inclua também o Serviço de Gerenciamento (listado em "Ferramentas de Gerenciamento").

Captura de tela que mostra o Assistente para Adicionar Funções e Recursos. O Serviço de Gerenciamento está selecionado.

Instale a Implantação da Web 3.0. Ao executar o Gerenciador do IIS, ele solicitará que você instale Microsoft Web Platform ou você poderá baixar o instalador. No Instalador de Plataforma, pesquise Implantação na Web e instale a Implantação da Web 3.0

Captura de tela que mostra a caixa de diálogo Instalador da Plataforma Web 4 pontos 5. Implantação da Web 3 ponto 0 está selecionado.

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, verifique se 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 no portal do Azure. Confira 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 para o 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 delas recebe mensagens do SignalR da outra. (É claro que, em um ambiente de produção, os dois servidores ficariam atrás de um balanceador de carga.)

Captura de tela de duas janelas do navegador abertas mostrando o aplicativo implantado em dois servidores.

Se você estiver curioso para ver as mensagens enviadas ao Redis, poderá usar o cliente redis-cli , que é instalado com o Redis.

redis-cli -a password
SUBSCRIBE ChatApp

Captura de tela que mostra uma lista numerada em uma janela do Redis.