Ativar as atualizações automáticas numa aplicação Web com o SignalR Service

Concluído

Aplicação Web baseada em sondagem.

Em seguida, nos afastamos da sondagem e nos aproximamos de um aplicativo que envia atualizações de dados (à medida que ocorrem) para clientes conectados. Este novo design reduz o tráfego e cria uma IU mais eficiente, ao atualizar apenas quando existem alterações de dados. As três tecnologias que usamos para fornecer essa solução atualizada são Azure Cosmos DB, Azure Functions e SignalR.

  • Azure Cosmos DB: À medida que os dados são alterados no banco de dados, o Azure Cosmos DB expõe um feed de alterações. O suporte para o feed de alterações no Azure Cosmos DB funciona através da escuta de alterações de um contentor de base de dados. Em seguida, gera a lista ordenada de documentos alterados pela ordem em que foram modificados. Quando seu aplicativo escuta o feed de alterações, ele pode responder automaticamente às alterações de dados.

  • Azure Functions: A principal diferença entre esta função e a função original getStocks é que a função agora é acionada com base em alterações em nossos dados. No exercício anterior, acionámos a nossa função com base nos pedidos do cliente e retirámos todos os dados através de um enlace de entrada do Azure Cosmos DB. Usar o gatilho do Azure Cosmos DB automaticamente torna nossa recuperação de dados mais eficiente. As Funções do Azure dispõem de um enlace que executa código sempre que os dados são atualizados num feed de alterações do Azure Cosmos DB. Quando uma função está a escutar o feed de alterações, é possível trabalhar com um subconjunto dos dados, que representa apenas as alterações de dados.

  • Azure SignalR: este serviço fornece comunicação de 2 vias com uma conexão SignalR no cliente ouvindo transmissões do SignalR do aplicativo Azure Functions.

O SignalR e as ligações persistentes

Ao contrário da consulta, um design mais favorável apresenta ligações persistentes entre o cliente e o servidor. Estabelecer uma ligação persistente permite que o servidor envie dados para o cliente à vontade. A natureza a pedido da ligação reduz o tráfego de rede e a carga no servidor. O SignalR permite-lhe adicionar facilmente este tipo de arquitetura à sua aplicação.

O SignalR é uma abstração de uma série de tecnologias que permite à aplicação usufruir de comunicação bidirecional entre o cliente e o servidor. O SignalR processa automaticamente a gestão de ligações e permite-lhe transmitir mensagens para todos os clientes ligados ao mesmo tempo, como uma sala de chat. Também pode enviar mensagens para clientes específicos. A ligação entre o cliente e o servidor é persistente, ao contrário de uma ligação HTTP clássica, que é restabelecida para todas as comunicações.

Uma das principais vantagens da abstração fornecida pelo SignalR é a forma como suporta contingências de "transporte". Um transporte é um método de comunicação entre o cliente e o servidor. As ligações do SignalR começam com um pedido HTTP padrão. Enquanto o servidor avalia a ligação, o método de comunicação (transporte) mais apropriado é selecionado. Quando aliada a uma ligação persistente ao cliente, a função pode contactar os clientes individuais a pedido, que é a base para uma arquitetura de aplicação em tempo real. Os transportes são escolhidos dependendo das APIs disponíveis no cliente:

  • HTML 5: Para clientes que suportam HTML 5, o transporte da API WebSockets é usado por padrão.
  • WebSockets: Se o cliente não suportar WebSockets, o SignalR retornará para Eventos Enviados pelo Servidor (também conhecido como EventSource).
  • Outra tecnologia: Para clientes mais antigos, a sondagem longa Ajax ou Forever Frame (apenas IE) é usada para imitar uma conexão bidirecional.

A camada de abstração oferecida pelo SignalR fornece dois benefícios à sua aplicação. A primeira vantagem é a durabilidade da sua aplicação. À medida que a Web evolui e as APIs superiores ao WebSockets ficam disponíveis, a sua aplicação não precisa de ser alterada. Você pode atualizar para uma versão do SignalR que suporte quaisquer novas APIs e não precisa revisar o código do aplicativo.

A segunda vantagem é que o SignalR permite que a qualidade da sua aplicação seja reduzida gradualmente, dependendo das tecnologias suportadas do cliente. Se não suportar WebSockets, serão utilizados os Eventos Enviados do Servidor. Se o cliente não conseguir processar Eventos Enviados do Servidor, utilizará a consulta longa Ajax e assim por diante.

Vamos ver como usar o SignalR para transmitir informações de uma função que lê o feed de alterações do Azure Cosmos DB.