Detalhes internos do Serviço SignalR do Azure

Azure SignalR Service é construída em cima da estrutura ASP.NET Core SignalR. Também apoia ASP.NET SignalR, reimplementando o protocolo de dados do ASP.NET SignalR no topo do quadro ASP.NET Core.

Pode migrar facilmente uma aplicação ASP.NET Core SignalR local ou ASP.NET aplicação SignalR para trabalhar com SignalR Service, com algumas linhas de mudança de código.

O diagrama abaixo descreve a arquitetura típica quando utiliza o SignalR Service com o servidor de aplicações.

As diferenças entre a aplicação ASP.NET Core SignalR, auto-acolhida, também são discutidas.

Arquitetura

Ligações de servidor

O servidor de aplicação SignalR ASP.NET Core auto-alojado ouve e liga diretamente os clientes.

Com SignalR Service, o servidor de aplicações já não aceita ligações persistentes do cliente:

  1. Um negotiate ponto final é exposto por Azure SignalR Service SDK para cada hub.
  2. Este ponto final irá responder aos pedidos de negociação do cliente e redirecionar os clientes para SignalR Service.
  3. Eventualmente, os clientes estarão ligados a SignalR Service.

Para mais informações, consulte as ligações do Cliente.

Uma vez iniciado o servidor de aplicações,

  • Para ASP.NET Core SignalR, Azure SignalR Service SDK abre 5 ligações WebSocket por hub para SignalR Service.
  • Para ASP.NET SignalR, Azure SignalR Service SDK abre 5 ligações WebSocket por hub para SignalR Service e uma por aplicação Ligação WebSocket.

5 Ligações WebSocket é o valor predefinido que pode ser alterado na configuração. Por favor, note que isto configura a contagem inicial de ligação do servidor que o SDK começa. Enquanto o servidor de aplicações está ligado ao serviço SignalR, o serviço Azure SignalR pode enviar mensagens de equilíbrio de carga para o servidor e o SDK iniciará novas ligações de servidor ao serviço para um melhor desempenho.

As mensagens de e para os clientes serão multiplexed nestas ligações.

Estas ligações permanecerão sempre ligadas ao SignalR Service. Se uma ligação do servidor for desligada para problemas de rede,

  • todos os clientes que são servidos por esta ligação de servidor desligam (para obter mais informações sobre o mesmo, consulte dados transmitidos entre cliente e servidor);
  • a ligação do servidor começa a ligar-se automaticamente.

Ligações de cliente

Quando utiliza o SignalR Service, os clientes conectam-se a SignalR Service em vez do servidor de aplicações. Existem duas etapas para estabelecer ligações persistentes entre o cliente e o SignalR Service.

  1. O cliente envia um pedido de negociação para o servidor de aplicações. Com Azure SignalR Service SDK, o servidor de aplicações devolve uma resposta de redirecionamento com o URL de SignalR Service e o token de acesso.

    • Para ASP.NET Core SignalR, uma resposta típica de redirecionamento parece:
      {
          "url":"https://test.service.signalr.net/client/?hub=chat&...",
          "accessToken":"<a typical JWT token>"
      }
      
    • Para ASP.NET SignalR, uma resposta típica de redirecionamento parece:
      {
          "ProtocolVersion":"2.0",
          "RedirectUrl":"https://test.service.signalr.net/aspnetclient",
          "AccessToken":"<a typical JWT token>"
      }
      
  2. Depois de receber a resposta de redirecionamento, o cliente usa o novo URL e o token de acesso para iniciar o processo normal para ligar a SignalR Service.

Saiba mais sobre ASP.NET Core protocolos de transporte da SignalR.

Os dados transmitem entre cliente e servidor

Quando um cliente está ligado ao SignalR Service, o tempo de execução do serviço encontrará uma ligação de servidor para servir este cliente

  • Este passo só acontece uma vez, e é um mapeamento de um para um entre as ligações do cliente e do servidor.
  • O mapeamento é mantido em SignalR Service até que o cliente ou servidor se desligue.

Neste momento, o servidor de aplicações recebe um evento com informações do novo cliente. Uma ligação lógica ao cliente é criada no servidor de aplicações. O canal de dados é estabelecido de cliente para servidor de aplicações, através de SignalR Service.

SignalR Service transmite dados do cliente para o servidor de aplicações de emparelhamento. E os dados do servidor de aplicações serão enviados para os clientes mapeados.

SignalR Service não guarda nem armazena os dados do cliente, todos os dados do cliente recebidos são transmitidos para servidor ou clientes alvo em tempo real.

Como pode ver, o Azure SignalR Service é essencialmente uma camada lógica de transporte entre servidor de aplicações e clientes. Todas as ligações persistentes são descarregadas para SignalR Service. O servidor de aplicações só precisa de lidar com a lógica de negócio na classe hub, sem se preocupar com as ligações com o cliente.