Włączanie aktualizacji automatycznych w aplikacji internetowej za pomocą usługi SignalR Service

Ukończone

Aplikacja internetowa oparta na sondowaniu.

Następnie odejdziemy od sondowania i do aplikacji, która wypycha aktualizacje danych (w miarę ich występowania) do połączonych klientów. Taki nowy projekt zmniejsza ruch i zwiększa efektywność interfejsu użytkownika, wykonując aktualizacje tylko po zmianie danych. Trzy technologie używane do dostarczania tego zaktualizowanego rozwiązania to Azure Cosmos DB, Azure Functions i SignalR.

  • Azure Cosmos DB: w miarę zmian danych w bazie danych usługa Azure Cosmos DB uwidacznia źródło zmian. Funkcja obsługi zestawienia zmian w usłudze Azure Cosmos DB działa przez nasłuchiwanie zmian kontenera bazy danych. Następnie wyprowadza posortowaną listę zmienionych dokumenty w kolejności modyfikacji. Gdy aplikacja nasłuchuje zestawienia zmian, może automatycznie reagować na zmiany danych.

  • Azure Functions: kluczową różnicą między tą funkcją a oryginalną getStocks funkcją jest to, że funkcja jest teraz wyzwalana na podstawie zmian w danych. W poprzednim ćwiczeniu wyzwalaliśmy funkcję na podstawie żądań klienta i ściągaliśmy z powrotem wszystkie dane za pomocą powiązania danych wejściowych usługi Azure Cosmos DB. Użycie wyzwalacza usługi Azure Cosmos DB automatycznie zwiększa wydajność pobierania danych. Usługa Azure Functions udostępnia powiązanie, które uruchamia kod po każdej aktualizacji danych w zestawieniu zmian usługi Azure Cosmos DB. Gdy funkcja nasłuchuje zestawienia zmian, możesz pracować z podzbiorem danych, który reprezentuje tylko zmiany danych.

  • Azure SignalR: ta usługa zapewnia dwukierunkową komunikację z połączeniem SignalR na kliencie nasłuchując emisji SignalR z aplikacji usługi Azure Functions.

Usługa SignalR i połączenia trwałe

W przeciwieństwie do sondowania, korzystniejszy projekt obejmuje połączenia trwałe między klientem i serwerem. Nawiązanie połączenia trwałego umożliwia serwerowi wypchnięcie danych do klienta w dowolnym momencie. Korzystanie z połączenia na żądanie zmniejsza ilość ruchu sieciowego i obciążenie serwera. Usługa SignalR umożliwia łatwe dodanie architektury tego typu do aplikacji.

Usługa SignalR stanowi abstrakcję dla serii technologii, która umożliwia aplikacji korzystanie z dwukierunkowej komunikacji między klientem a serwerem. Usługa SignalR automatycznie obsługuje zarządzanie połączeniami i umożliwia rozgłaszanie komunikatów do wszystkich połączonych klientów równocześnie, tak w przypadku pokoju rozmów. Można również wysyłać komunikaty do określonych klientów. Połączenie między klientem i serwerem jest trwałe w odróżnieniu od klasycznego połączenia HTTP, które jest nawiązywane ponownie dla każdej komunikacji.

Kluczowa korzyść z abstrakcji udostępnianej przez usługę SignalR to sposób obsługi akcji rezerwowych „transportu”. Transport to metoda komunikacji między klientem a serwerem. Połączenia usługi SignalR rozpoczynają się od standardowego żądania HTTP. Serwer ocenia połączenie i wybiera najbardziej odpowiednią metodę komunikacji (transport). Użycie razem z trwałym połączeniem z klientem umożliwia funkcji kontaktowanie się z poszczególnymi klientami na żądanie, co jest podstawą architektury aplikacji czasu rzeczywistego. Transporty są wybierane w zależności od interfejsów API dostępnych na kliencie:

  • HTML 5: W przypadku klientów, którzy obsługują kod HTML 5, transport interfejsu API Protokołu WebSockets jest domyślnie używany.
  • WebSockets: jeśli klient nie obsługuje obiektów WebSocket, usługa SignalR powraca do zdarzeń wysłanych przez serwer (nazywanych również zdarzeniem EventSource).
  • Inna technologia: W przypadku starszych klientów, sondowanie długie Ajax lub Forever Frame (tylko IE) jest używane do naśladowania połączenia dwukierunkowego.

Warstwa abstrakcji oferowana przez usługę SignalR daje aplikacji dwie korzyści. Pierwszą jest gotowość na przyszłe zmiany. W miarę rozwoju Internetu i udostępniania interfejsów API lepszych niż WebSockets aplikacji nie trzeba będzie zmieniać. Możesz zaktualizować usługę SignalR do wersji obsługującej wszystkie nowe interfejsy API i nie trzeba remontować kodu aplikacji.

Druga korzyść polega na tym, że usługa SignalR zezwala aplikacji na stopniowe obniżenie poziomu komunikacji w zależności od technologii obsługiwanych przez klienta. Jeśli nie obsługuje on połączeń WebSockets, będą używane połączenia Server Sent Events. Jeśli klient nie obsługuje połączeń Server Sent Events, będzie używane długie odpytywanie Ajax i tak dalej.

Przyjrzyjmy się, jak używać usługi SignalR do emisji informacji z funkcji, która odczytuje zestawienie zmian usługi Azure Cosmos DB.