Componentes internos do Serviço do Azure SignalR
O Serviço do Azure SignalR é criado com base na estrutura do ASP.NET Core SignalR. Também oferece suporte ao ASP.NET SignalR, reimplementando o protocolo de dados do ASP.NET SignalR sobre a estrutura do ASP.NET Core.
Você pode migrar facilmente um SignalR do ASP.NET Core local ou um aplicativo SignalR do ASP.NET para trabalhar com o Serviço do SignalR, alterando algumas linhas de código.
O diagrama descreve a arquitetura típica quando você usa o Serviço do SignalR com o servidor de aplicativos.
As diferenças de aplicativo auto-hospedado do ASP.NET Core SignalR também são abordadas.
Conexões do servidor de aplicativos
Um servidor de aplicativos do SignalR do ASP.NET Core auto-hospedado escuta e conecta os clientes diretamente.
Com o Serviço do SignalR, o servidor de aplicativos não aceita mais conexões de cliente persistentes; em vez disso:
- Um ponto de extremidade
negotiate
é exposto pelo SDK do Serviço do Azure SignalR para cada hub. - O ponto de extremidade responde às solicitações de negociação do cliente e redireciona clientes para o Serviço do SignalR.
- Os clientes se conectam ao Serviço do SignalR.
Para saber mais, confira Aplicativos cliente.
Depois que o servidor de aplicativos for iniciado:
- Para SignalR do ASP.NET Core: o SDK do Serviço do Azure SignalR abre cinco conexões WebSocket por hub para o Serviço do SignalR.
- Para SignalR do ASP.NET: o SDK do Serviço do Azure SignalR abre cinco conexões WebSocket por hub para o Serviço do SignalR e uma por conexão WebSocket por aplicativo.
O número inicial de conexões usa como padrão 5 e é configurável usando a opção InitialHubServerConnectionCount
no SDK do Serviço do SignalR. Para obter mais informações, confira Configuração.
Embora o servidor de aplicativos esteja conectado ao Serviço do SignalR, o serviço do Azure SignalR envia mensagens de balanceamento de carga para o servidor. Em seguida, o SDK inicia novas conexões de servidor com o serviço para melhor desempenho. As mensagens de e para clientes são multiplexadas nessas conexões.
As conexões de servidor são conectadas persistentemente ao Serviço do SignalR. Se uma conexão de servidor estiver desconectada devido a um problema de rede:
- Todos os clientes atendidos por esta conexão de servidor se desconectam. Para obter mais informações, confira Transmissão de dados entre o cliente e o servidor.
- O servidor reconecta automaticamente os clientes.
Conexões de cliente
Quando você usa o Serviço do SignalR, os clientes se conectam ao serviço em vez do servidor de aplicativos. Há três etapas para estabelecer conexões persistentes entre o cliente e o Serviço do SignalR.
O cliente envia uma solicitação de negociação para o servidor de aplicativos.
O servidor de aplicativos usa o SDK do Serviço do Azure SignalR para retornar uma resposta de redirecionamento que contém a URL do Serviço do SignalR e o token de acesso.
- Para o ASP.NET Core SignalR, uma resposta de redirecionamento típica se parece com:
{ "url":"https://test.service.signalr.net/client/?hub=chat&...", "accessToken":"<a typical JWT token>" }
- Para o SignalR do ASP.NET, uma resposta de redirecionamento típica se parece com:
{ "ProtocolVersion":"2.0", "RedirectUrl":"https://test.service.signalr.net/aspnetclient", "AccessToken":"<a typical JWT token>" }
- Para o ASP.NET Core SignalR, uma resposta de redirecionamento típica se parece com:
Depois que o cliente recebe a resposta de redirecionamento, ele usa o URL e o token de acesso para se conectar ao Serviço do SignalR.
Para saber mais sobre o SignalR do ASP.NET Core, confira Protocolos de Transporte.
Transmissão de dados entre cliente e servidor
Quando um cliente está conectado ao Serviço do SignalR, o runtime de serviço encontra uma conexão de servidor para atender a este cliente.
- Esta etapa ocorre apenas uma vez e é um mapeamento de um-para-um entre a conexão de cliente e servidor.
- O mapeamento é mantido no Serviço do SignalR até que o cliente ou o servidor desconecte.
Neste ponto, o servidor de aplicativos recebe um evento com informações do novo cliente. Uma conexão lógica para o cliente é criada no servidor de aplicativos. O canal de dados é estabelecido do cliente para o servidor de aplicativos, por meio do Serviço do SignalR.
O Serviço do SignalR transmite dados do cliente para o servidor de aplicativos de emparelhamento. Os dados do servidor de aplicativos são enviados para os clientes mapeados.
O Serviço do SignalR não salva nem armazena dados do cliente; todos os dados do cliente recebidos são transmitidos para o servidor de destino ou clientes em tempo real.
O Serviço do Azure SignalR atua como uma camada de transporte lógico entre o servidor de aplicativos e os clientes. Todas as conexões persistentes são descarregadas para o Serviço do SignalR. Como resultado, o servidor de aplicativos só precisa lidar com a lógica de negócios na classe do hub, sem se preocupar com conexões de cliente.
Próximas etapas
Para saber mais sobre os SDKs do Azure SignalR, confira: