Habilitar atualizações automáticas em um aplicativo Web usando o Serviço do SignalR

Concluído

Aplicativo Web baseado em sondagem.

Em seguida, deixaremos de usar a sondagem e passaremos a usar um aplicativo que envia atualizações de dados aos clientes conectados à medida que elas ocorrem. Esse novo design reduz o tráfego e torna a UI mais eficiente, atualizando apenas quando os dados mudam. As três tecnologias que usamos para fornecer essa solução atualizada são o Azure Cosmos DB, o Azure Functions e o 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 ao feed de alterações no Azure Cosmos DB funciona monitorando em tempo real as alterações em um contêiner de banco de dados. Em seguida, ele gera a lista classificada de documentos alterados na ordem em que foram modificados. Quando o aplicativo escuta o feed de alterações, ele pode responder automaticamente às alterações de dados.

  • Azure Functions: a principal diferença entre essa função e a função original getStocks é que a função agora é disparada com base em alterações em nossos dados. No exercício anterior, acionamos nossa função com base em solicitações do cliente e recuperamos todos os dados por meio de uma associação de entrada do Azure Cosmos DB. Usar o gatilho do Azure Cosmos DB automaticamente torna nossa recuperação de dados mais eficiente. O Azure Functions apresenta uma associação que executa código sempre que os dados são atualizados em um feed de alterações do Azure Cosmos DB. Depois que uma função estiver escutando o feed de alterações, você poderá trabalhar com um subconjunto de seus dados que representa apenas as alterações de dados.

  • Azure SignalR: esse serviço fornece comunicação bidirecional com uma conexão SignalR no cliente que escuta as transmissões do SignalR do aplicativo Azure Functions.

SignalR e conexões persistentes

Em contraste com a sondagem, um design mais favorável apresenta conexões persistentes entre o cliente e o servidor. Estabelecer uma conexão persistente permite que o servidor envie dados por push para o cliente à vontade. A natureza sob demanda da conexão reduz o tráfego de rede e a carga no servidor. O SignalR permite que você adicione facilmente esse tipo de arquitetura ao seu aplicativo.

O SignalR é uma abstração para uma série de tecnologias que permitem que seu aplicativo aproveite a comunicação bidirecional entre o cliente e o servidor. O SignalR manipula o gerenciamento de conexões automaticamente e permite que você transmita mensagens para todos os clientes conectados simultaneamente, como uma sala de chat. Você também pode enviar mensagens para clientes específicos. A conexão entre o cliente e o servidor é persistente, ao contrário de uma conexão HTTP clássica, que é restabelecida para cada comunicação.

Um dos principais benefícios da abstração fornecida pelo SignalR é a maneira como ele dá suporte a alternativas de "transporte". Um transporte é um método de comunicação entre o cliente e o servidor. As conexões do SignalR começam com uma solicitação HTTP padrão. À medida que o servidor avalia a conexão, o método de comunicação mais apropriado (transporte) é selecionado. Quando emparelhada com uma conexão persistente com o cliente, a função pode contatar clientes individuais sob demanda, que é a base para uma arquitetura de aplicativo em tempo real. Os transportes são escolhidos dependendo das APIs disponíveis no cliente:

  • HTML 5: Para clientes que dão suporte a HTML 5, o transporte da API WebSockets é usado por padrão.
  • WebSockets: se o cliente não der suporte a WebSockets, o SignalR retornará aos Eventos Enviados pelo Servidor (também conhecidos como EventSource).
  • Outra tecnologia: para clientes mais antigos, o long polling do Ajax ou o Forever Frame (somente Internet Explorer) são usados para imitar uma conexão bidirecional.

A camada de abstração oferecida pelo SignalR oferece dois benefícios para seu aplicativo. A primeira vantagem é preparar o seu aplicativo para o futuro. À medida que a Web evolui e AS APIs superiores a WebSockets ficam disponíveis, seu aplicativo não precisa ser alterado. Você pode atualizar para uma versão do SignalR que dá suporte a novas APIs e não precisa revisar o código do aplicativo.

O segundo benefício é que o SignalR permite que seu aplicativo degrade suavemente dependendo das tecnologias suportadas pelo cliente. Se ele não der suporte a WebSockets, os Eventos Enviados pelo Servidor serão usados. Se o cliente não for compatível com Server Sent Events, ele usará a sondagem longa do Ajax e assim por diante.

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