Aktivieren automatischer Updates in einer Webanwendung mithilfe von SignalR Service

Abgeschlossen

Abrufbasierte Webanwendung

Als Nächstes gehen wir von einer abrufbasierten App zu einer App über, die Datenupdates (sobald sie auftreten) an verbundene Clients pusht. Dieses neue Design reduziert den Datenverkehr und führt zu einer effizienteren Benutzeroberfläche, indem nur Updates erfolgen, wenn sich Daten ändern. Die drei Technologien, die hier verwendet werden, um diese aktualisierte Lösung zu erstellen, sind Azure Cosmos DB, Azure Functions und SignalR.

  • Azure Cosmos DB: Wenn sich Daten in der Datenbank ändern, macht Azure Cosmos DB einen Änderungsfeed verfügbar. Zur Unterstützung des Änderungsfeeds in Azure Cosmos DB wird gelauscht, ob in einem Datenbankcontainer Änderungen auftreten. Anschließend wird die sortierte Liste von geänderten Dokumenten in der Reihenfolge ausgegeben, in der sie geändert wurden. Wenn Ihre Anwendung auf den Änderungsfeed lauscht, kann sie automatisch auf Datenänderungen reagieren.

  • Azure Functions: Der Hauptunterschied zwischen dieser Funktion und der ursprünglichen getStocks-Funktion ist der, dass die Funktion nun auf Grundlage von Änderungen an unseren Daten ausgelöst wird. In der vorherigen Übung wurde unsere Funktion auf Grundlage von Anforderungen vom Client ausgelöst, und alle Daten wurden über eine Azure Cosmos DB-Eingabebindung abgerufen. Die Verwendung des Azure Cosmos DB-Triggers macht den Datenabruf automatisch effizienter. Azure Functions verfügt über eine Bindung, die Code jedes Mal dann ausführt, wenn Daten in einem Azure Cosmos DB-Änderungsfeed aktualisiert werden. Sobald eine Funktion auf den Änderungsfeed lauscht, können Sie mit einer Teilmenge Ihrer Daten arbeiten, in der nur Datenänderungen berücksichtigt werden.

  • Azure SignalR: Dieser Dienst bietet eine 2-Wege-Kommunikation mit einer SignalR-Verbindung auf dem Client, die SignalR-Übertragungen von der Azure Functions-App abhört.

SignalR und permanente Verbindungen

Im Gegensatz zu Abfragen weist ein vorteilhafteres Design permanente Verbindungen zwischen Client und Server auf. Wenn eine permanente Verbindung hergestellt wird, kann der Server Daten nach Belieben an den Client pushen. Der bedarfsgesteuerte Ansatz dieser Verbindung reduziert den Datenverkehr und die Last auf dem Server. Mithilfe von SignalR können Sie diesen Architekturstil mühelos auf Ihre Anwendung übertragen.

SignalR ist eine Abstraktion einer Reihe von Technologien, mithilfe derer Ihre App von einer bidirektionalen Kommunikation zwischen Client und Server profitieren kann. SignalR übernimmt die Verbindungsverwaltung automatisch und ermöglicht Ihnen, Nachrichten an alle verbundenen Clients gleichzeitig zu übertragen, wie in einem Chatroom. Nachrichten können auch nur an bestimmte Clients gesendet werden. Die Verbindung zwischen Client und Server besteht permanent und unterscheidet sich damit von einer klassischen HTTP-Verbindung, die für jede Kommunikation neu hergestellt wird.

Ein Hauptvorteil dieser von SignalR bereitgestellten Abstraktion ist die Art und Weise, wie „Datentransportfallbacks“ unterstützt werden. Ein Datentransport ist eine Kommunikationsmethode zwischen Client und Server. SignalR-Verbindungen beginnen mit einer HTTP-Standardanforderung. Während der Server die Verbindung auswertet, wird die passendste Kommunikationsmethode (Datentransport) ausgewählt. Bei einer Kombination mit einer permanenten Verbindung zum Client kann die Funktion bei Bedarf individuelle Clients kontaktieren. Dies ist die Grundlage einer Echtzeitanwendungsarchitektur. Datentransporte werden auf Grundlage der auf dem Client verfügbaren APIs ausgewählt:

  • HTML 5: Für Clients, die HTML 5 unterstützen, wird standardmäßig der WebSockets-API-Datentransport verwendet.
  • WebSockets: Wenn der Client WebSockets nicht unterstützt, greift SignalR auf sogenannte Server Sent Events zurück (auch bekannt als EventSource).
  • Andere Technologie: Bei älteren Clients kommen sogenanntes Long Polling (Ajax) oder Forever Frame (nur für Internet Explorer) zum Einsatz, um eine bidirektionale Kommunikation nachzustellen.

Die von SignalR angebotene Abstraktionsebene bringt zwei Vorteile für Ihre Anwendung mit sich. Der erste Vorteil ist die Zukunftsfähigkeit Ihrer App. Während sich das Web weiterentwickelt und APIs verfügbar gemacht werden, die sich noch besser eignen als WebSockets, muss Ihre Anwendung nicht geändert werden. Sie könnten ein Update auf eine SignalR-Version durchführen, die neue APIs unterstützt, und Sie müssen Ihren Anwendungscode nicht überarbeiten.

Der zweite Vorteil besteht darin, dass SignalR Ihrer Anwendung ein korrektes Herabstufen ermöglicht, je nach unterstützten Technologien des Clients. Wenn WebSockets nicht unterstützt wird, werden stattdessen Server Sent Events verwendet. Wenn der Client Server Sent Events nicht verarbeiten kann, kommt unter anderem Long Polling (Ajax) zum Einsatz.

Sehen Sie sich an, wie SignalR Informationen von einer Funktion übertragen kann, die den Azure Cosmos DB-Änderungsfeed liest.