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.
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á.
Instale o Redis e inicie o servidor Redis.
Adicione estes pacotes NuGet ao seu aplicativo:
Crie um aplicativo SignalR.
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.
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.
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
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.
Inclua também o Serviço de Gerenciamento (listado em "Ferramentas de Gerenciamento").
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
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.)
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