Partilhar via


Expansão do SignalR com Redis (SignalR 1.x)

por Patrick Fletcher

Aviso

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

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 de chave-valor na memória. Ele também dá suporte a um sistema de mensagens com um modelo de publicação/assinatura. O plano de fundo do SignalR Redis usa o recurso pub/sub para encaminhar mensagens para outros servidores.

Diagrama que ilustra a relação entre o Redis Server, que assina v ms, computadores, que, em seguida, publicam V Ms no Redis Servers.

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 neste 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 configuração e a configuração são diferentes, mas, caso contrário, as etapas são as mesmas.

Observação

O scaleout do SignalR com o 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 ao Global.asax para configurar o backplane:

    protected void Application_Start()
    {
        GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

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.

Captura de tela do Assistente para Nova Máquina Virtual mostrando o painel Conectar Disco Rígido Virtual e o campo Nome sendo realçados.

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 do Assistente para Nova Máquina Virtual com o painel Opções de Instalação e a opção Arquivo de Imagem sendo realçada.

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 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 da janela do servidor Redis do Usuário do Azure, mostrando informações do servidor, incluindo quando o servidor foi iniciado e a memória status.

Abra a porta 6379, que é a porta padrão em 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 o Redis. Primeiro, adicione o pacote NuGet SignalR.Redis ao seu projeto. No Visual Studio, no menu Ferramentas , selecione Gerenciador de Pacotes NuGet e, em seguida, Console do Gerenciador de Pacotes. Na janela Console do Gerenciador de Pacotes, digite o seguinte comando:

Install-Package Microsoft.AspNet.SignalR.Redis

Em seguida, abra o arquivo Global.asax. Adicione o seguinte código ao método Application_Start :

protected void Application_Start()
{
    GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");

    RouteTable.Routes.MapHubs();
}
  • "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 pub/subcanal redis com esse nome.

Por exemplo:

GlobalHost.DependencyResolver.UseRedis("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 do Assistente para Adicionar Funções e Recursos com as opções Funções de Servidor e Protocolo de Soquete Web sendo realçadas.

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

Captura de tela do Assistente para Adicionar Funções e Recursos com as Funções de Servidor e as opções de Ferramentas e Scripts de Gerenciamento de E/S que estão sendo realçadas.

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

Captura de tela da tela de resultados da pesquisa do Instalador da Plataforma Web 4 pontos 5 com a opção Implantar na Web 3 pontos 0 realçada.

Verifique se o Serviço de Gerenciamento 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. 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 um deles recebe mensagens SignalR do outro. (É claro que, em um ambiente de produção, os dois servidores ficavam atrás de um balanceador de carga.)

Captura de tela das mensagens do Signal R que estão sendo exibidas em um navegador da Web Explorer internet, exibindo a tela Índice.

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 da tela de saída do Usuário do Azure, que exibe as informações de todas as mensagens enviadas e o código acompanhado.