Automatische updates in een webtoepassing inschakelen met behulp van SignalR Service

Voltooid

Op polling gebaseerde webtoepassing.

Vervolgens gaan we verder van polling en naar een app die gegevensupdates (wanneer ze optreden) naar verbonden clients pusht. Dankzij dit nieuwe ontwerp is er minder verkeer en wordt de gebruikersinterface efficiënter, omdat er alleen wordt bijgewerkt wanneer gegevens worden gewijzigd. De drie technologieën die we gebruiken om deze bijgewerkte oplossing te leveren, zijn Azure Cosmos DB, Azure Functions en SignalR.

  • Azure Cosmos DB: Als gegevens in de database worden gewijzigd, wordt in Azure Cosmos DB een wijzigingenfeed weergegeven. De ondersteuning voor wijzigingenfeeds in Azure Cosmos DB controleert een databasecontainer op wijzigingen. Vervolgens wordt een gesorteerde lijst met gewijzigde documenten uitgevoerd in de volgorde waarin ze zijn aangepast. Wanneer uw toepassing luistert naar de wijzigingenfeed, kan deze automatisch reageren op gegevenswijzigingen.

  • Azure Functions: Het belangrijkste verschil tussen deze functie en de oorspronkelijke getStocks functie is dat de functie nu wordt geactiveerd op basis van wijzigingen in onze gegevens. In de vorige oefening hebben we onze functie geactiveerd op basis van aanvragen van de client en hebben we alle gegevens opgehaald via een invoerbinding van Azure Cosmos DB. Door de Azure Cosmos DB-trigger te gebruiken, wordt het ophalen van gegevens automatisch efficiënter. Azure Functions is voorzien van een binding waardoor code steeds wordt uitgevoerd wanneer gegevens in een Azure Cosmos DB-wijzigingenfeed worden bijgewerkt. Zodra een functie de wijzigingenfeed controleert, kunt u een subset van uw gegevens gebruiken waarin alleen die gewijzigde gegevens worden weergegeven.

  • Azure SignalR: deze service biedt tweerichtingscommunicatie met een SignalR-verbinding op de client die luistert naar SignalR-broadcasts vanuit de Azure Functions-app.

SignalR en permanente verbindingen

In tegenstelling tot polling zijn bij een gunstiger ontwerp permanente verbindingen tussen de client en de server mogelijk. Door een permanente verbinding tot stand te brengen, kunnen gegevens via de server naar de client worden gepusht wanneer dat nodig is. Omdat de verbinding on-demand is, is er minder netwerkverkeer en minder belasting op de server. Met SignalR kunt u dit type architectuur eenvoudig aan uw toepassing toevoegen.

SignalR is een abstractie voor een reeks technologieën waarmee u via uw app bidirectionele communicatie tussen de client en de server tot stand kunt brengen. Verbindingsbeheer wordt door SignalR automatisch verwerkt. U kunt berichten naar alle verbonden clients tegelijk verzenden, net zoals in een chatroom. U kunt ook berichten naar specifieke clients sturen. De verbinding tussen de client en de server is permanent, in tegenstelling tot een klassieke HTTP-verbinding die voor elke communicatie opnieuw tot stand moet worden gebracht.

Een belangrijk voordeel van de abstractie van SignalR is de manier waarop ‘transportfallbacks’ worden ondersteund. Een transportmethode is een communicatiemethode tussen de client en de server. SignalR-verbindingen beginnen met een standaard HTTP-aanvraag. Wanneer de verbinding door de server wordt geëvalueerd, wordt de meest geschikte communicatiemethode (transport) geselecteerd. Wanneer de functie wordt gekoppeld aan een permanente verbinding met de client, kan er on-demand contact worden gemaakt met afzonderlijke clients. Dit is de basis voor een realtime toepassingsarchitectuur. Transporten worden gekozen, afhankelijk van de API's die beschikbaar zijn op de client:

  • HTML 5: Voor clients die HTML 5 ondersteunen, wordt het WebSockets-API-transport standaard gebruikt.
  • WebSockets: Als de client geen ondersteuning biedt voor WebSockets, valt SignalR terug op Server Sent Events (ook wel EventSource genoemd).
  • Andere technologie: Voor oudere clients wordt lange polling van Ajax of Forever Frame (alleen IE) gebruikt om een tweerichtingsverbinding na te bootsen.

De abstractielaag van SignalR biedt twee voordelen voor uw toepassing. Het eerste voordeel is dat u uw app toekomstbestendig kunt maken. Naarmate het web zich verder ontwikkelt en API’s beschikbaar komen die beter zijn dan WebSockets, hoeft u uw toepassing niet te wijzigen. U kunt bijwerken naar een versie van SignalR die ondersteuning biedt voor nieuwe API's en u hoeft uw toepassingscode niet te herzien.

Het tweede voordeel is dat u uw toepassing met behulp van SignalR zorgvuldig kunt degraderen, afhankelijk van de ondersteunde technologieën van de client. Als WebSockets niet worden ondersteund, worden Door de server verzonden gebeurtenissen gebruikt. Als Door de server verzonden gebeurtenissen niet door de client kunnen worden verwerkt, worden eerst lange polling-acties van Ajax gebruikt, enzovoort.

Laten we eens kijken hoe u SignalR gebruikt om informatie uit te zenden van een functie die de Wijzigingenfeed van Azure Cosmos DB leest.