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
- Visual Studio 2013
- .NET 4.5
- SignalR versão 2.4
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.
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á.
Instale o Redis e inicie o servidor Redis.
Adicione estes pacotes NuGet ao seu aplicativo:
Crie um aplicativo SignalR.
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.
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 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
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.
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 você poderá baixar 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 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.)
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