Habilitar atualizações automáticas em um aplicativo Web usando o Serviço SignalR
Em seguida, nos afastamos da sondagem e nos aproximamos de um aplicativo que envia atualizações de dados (à medida que ocorrem) para clientes conectados. Esse novo design reduz o tráfego e torna a interface do usuário mais eficiente, atualizando apenas à medida que os dados mudam. As três tecnologias que usamos para fornecer essa solução atualizada são Azure Cosmos DB, Azure Functionse SignalR.
do Azure Cosmos DB: à medida que os dados são alterados no banco de dados, o Azure Cosmos DB expõe um fluxo de alterações . O suporte ao feed de alterações no Azure Cosmos DB funciona ao monitorizar um contentor de base de dados para alterações. Em seguida, ele produz a lista ordenada de documentos alterados na 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
getStocks
original é que a função agora é acionada 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. Quando uma função estiver ouvindo o feed de alterações, você poderá trabalhar com um subconjunto de seus dados que representa apenas as alterações de dados.Azure SignalR: Este serviço fornece comunicação bidirecional com uma conexão SignalR no cliente que escuta transmissões SignalR a partir 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 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-lhe adicionar facilmente este tipo de arquitetura à sua aplicaçã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 lida com o gerenciamento de conexões automaticamente e permite transmitir mensagens para todos os clientes conectados simultaneamente, como uma sala de bate-papo. 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 é o modo como suporta alternativas de transporte. Um transporte é um método de comunicação entre o cliente e o servidor. As conexões 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 entrar em contato com 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 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).
- Outras tecnologias: Para clientes mais antigos, o polling longo Ajax ou o Forever Frame, exclusivo para IE, é usado para imitar uma ligação bidirecional.
A camada de abstração oferecida pelo SignalR oferece dois benefícios para sua aplicação. A primeira vantagem é preparar seu aplicativo para o futuro. À medida que a Web evolui e APIs superiores a WebSockets se tornam disponíveis, seu aplicativo não precisa mudar. Você pode atualizar para uma versão do SignalR que suporte quaisquer novas APIs e não precisa revisar o código do aplicativo.
O segundo benefício é que o SignalR permite que seu aplicativo se degrade graciosamente dependendo das tecnologias suportadas pelo cliente. Se ele não oferecer suporte a WebSockets, os Eventos Enviados pelo Servidor serão usados. Se o cliente não puder manipular eventos enviados pelo servidor, este utilizará long polling do 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.