Aktivera automatiska uppdateringar i en webbapp med SignalR Service

Slutförd

Avsökningsbaserat webbprogram.

Därefter går vi bort från avsökning och mot en app som skickar datauppdateringar (när de inträffar) till anslutna klienter. Den här nya designen ger mindre trafik och är ett effektivare användargränssnitt genom att bara uppdatera när data ändras. De tre tekniker som vi använder för att leverera den här uppdaterade lösningen är Azure Cosmos DB, Azure Functions och SignalR.

  • Azure Cosmos DB: När data ändras i databasen exponerar Azure Cosmos DB ett ändringsflöde. Ändringsflödet i Azure Cosmos DB fungerar genom att lyssna på en databascontainer efter ändringar. Sedan returneras den sorterade listan över ändrade dokument i den ordning som de har ändrats. När programmet lyssnar på ändringsflödet kan det automatiskt svara på dataändringar.

  • Azure Functions: Den viktigaste skillnaden mellan den här funktionen och den ursprungliga getStocks funktionen är att funktionen nu utlöses baserat på ändringar i våra data. I den föregående övningen utlöste vi funktionen utifrån begäranden från klienten och hämtade alla data via en Azure Cosmos DB-indatabindning. Om du använder Azure Cosmos DB-utlösaren blir datahämtningen effektivare automatiskt. Azure Functions har en bindning som kör kod varje gång data uppdateras i ett Azure Cosmos DB-ändringsflöde. När en funktion lyssnar på ändringsflödet kan du arbeta med en delmängd av dina data som bara representerar dataändringarna.

  • Azure SignalR: Den här tjänsten tillhandahåller tvåvägskommunikation med en SignalR-anslutning på klienten som lyssnar på SignalR-sändningar från Azure Functions-appen.

SignalR och beständiga anslutningar

Till skillnad från avsökning har en mer fördelaktig design beständiga anslutningar mellan klienten och servern. Genom att upprätta en beständig anslutning kan servern skicka data till klienten på begäran. De här egenskaperna för anslutningen minskar nätverkstrafiken och belastningen på servern. Med SignalR kan du enkelt lägga till den här typen av arkitektur för appen.

SignalR är en abstraktion av ett antal tekniker som gör att appen kan använda dubbelriktad kommunikation mellan klient och server. SignalR hanterar anslutningshanteringen automatiskt, så att du kan sända meddelanden till alla anslutna klienter samtidigt, till exempel i ett chattrum. Du kan också skicka meddelanden till specifika klienter. Anslutningen mellan klienten och servern är beständig, till skillnad från en klassiska HTTP-anslutning som återupprättas för varje kommunikation.

En viktig fördel med abstraktionen du får med SignalR är sättet den stöder transportåterställningar. En transport är en kommunikationsmetod mellan klienten och servern. SignalR-anslutningar börjar med en HTTP-standardbegäran. När servern utvärderar anslutningen väljs den lämpligaste kommunikationsmetoden (transport). Tillsammans med en beständig anslutning till klienten kan funktionen kontakta enskilda klienter på begäran, vilket är grunden för en realtidsprogramarkitektur. Transporterna väljs beroende på vilka API:er som är tillgängliga på klienten:

  • HTML 5: För klienter som stöder HTML 5 används WebSockets API-transport som standard.
  • WebSockets: Om klienten inte stöder WebSockets återgår SignalR till Server Sent Events (kallas även EventSource).
  • Annan teknik: För äldre klienter används Ajax long polling eller Forever Frame (endast IE) för att efterlikna en dubbelriktad anslutning.

Abstraktionslagret som tillhandahålls av SignalR ger två fördelar till appen. Den första fördelen är att framtidssäkra appen. När webben utvecklas och API:er som är bättre än WebSockets blir tillgängliga behöver appen inte ändras. Du kan uppdatera till en version av SignalR som stöder nya API:er och du behöver inte se över programkoden.

Den andra fördelen är att SignalR gör så att appen kan nedgraderas på lämpligt sätt beroende på vilken teknik som stöds av klienten. Om den inte stöder WebSockets så används Server Sent Events. Om klienten inte kan hantera Server Sent Events används Ajax long polling och så vidare.

Nu ska vi titta på hur du använder SignalR för att sända information från en funktion som läser Azure Cosmos DB-ändringsflödet.