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 ASP.NET Core SignalR local ou um aplicativo ASP.NET SignalR para trabalhar com o Serviço SignalR, alterando algumas linhas de código.

O diagrama descreve a arquitetura típica quando você usa o serviço SignalR com o servidor de aplicativos.

As diferenças de aplicativo auto-hospedado do ASP.NET Core SignalR também são abordadas.

Architecture

Conexões do servidor de aplicativos

Um servidor de aplicativos ASP.NET Core SignalR auto-hospedado escuta e conecta clientes diretamente.

Com o Serviço SignalR, o servidor de aplicativos não aceita mais conexões de cliente persistentes, em vez disso:

  1. Um ponto de extremidade negotiate é exposto pelo SDK do Serviço do Azure SignalR para cada hub.
  2. O ponto de extremidade responde às solicitações de negociação do cliente e redireciona os clientes para o Serviço SignalR.
  3. Os clientes se conectam ao Serviço SignalR.

Para saber mais, confira Aplicativos cliente.

Depois que o servidor de aplicativos for iniciado:

  • Para ASP.NET Core SignalR: o SDK do Serviço SignalR do Azure abre cinco conexões WebSocket por hub para o Serviço SignalR.
  • Para ASP.NET SignalR: o SDK do Serviço SignalR do Azure abre cinco conexões WebSocket por hub para o Serviço SignalR e uma por conexão WebSocket de aplicativo.

O número inicial de conexões tem como padrão 5 e é configurável usando a InitialHubServerConnectionCount opção no SDK do Serviço SignalR. Para obter mais informações, consulte configuração.

Enquanto o servidor de aplicativos está conectado ao serviço SignalR, o serviço Azure SignalR pode enviar 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 os clientes são multiplexadas nessas conexões.

As conexões de servidor são conectadas persistentemente ao Serviço SignalR. Se uma conexão de servidor for desconectada devido a um problema de rede:

Conexões de cliente

Quando você usa o serviço 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 SignalR.

  1. Um cliente envia uma solicitação de negociação para o servidor de aplicativos.

  2. O servidor de aplicativos usa o SDK do Serviço SignalR do Azure para retornar uma resposta de redirecionamento contendo a URL do Serviço SignalR e o token de acesso.

    • Para 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 ASP.NET SignalR, uma resposta de redirecionamento típica se parece com:
      {
          "ProtocolVersion":"2.0",
          "RedirectUrl":"https://test.service.signalr.net/aspnetclient",
          "AccessToken":"<a typical JWT token>"
      }
      
  3. Depois que o cliente recebe a resposta de redirecionamento, ele usa a URL e o token de acesso para se conectar ao Serviço SignalR.

Para saber mais sobre ASP.NET Core SignalR's, consulte Protocolos de transporte.

Transmissão de dados entre cliente e servidor

Quando um cliente está conectado ao serviço SignalR, o tempo de execução do serviço localiza uma conexão de servidor para atender a esse cliente.

  • Essa etapa acontece apenas uma vez e é um mapeamento um-para-um entre a conexão do cliente e do 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 SignalR não salva nem armazena dados de clientes, todos os dados de clientes recebidos são transmitidos para o servidor de destino ou clientes em tempo real.

O Serviço 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 hub, sem se preocupar com conexões de cliente.

Próximas etapas

Para saber mais sobre os SDKs do Azure SignalR, consulte: