Włączanie automatycznych aktualizacji w aplikacji internetowej przy użyciu usługi SignalR Service
Następnie przechodzimy od sondowania do aplikacji, która przesyła aktualizacje danych w momencie ich występowania do klientów podłączonych do systemu. Ten nowy projekt zmniejsza ruch i sprawia, że bardziej wydajny interfejs użytkownika jest aktualizowany tylko w miarę zmian danych. Trzy technologie używane do dostarczania tego zaktualizowanego rozwiązania to azure Cosmos DB, Azure Functionsi SignalR.
usługi Azure Cosmos DB: w miarę jak dane w bazie danych ulegają zmianie, Azure Cosmos DB udostępnia strumień zmian . Obsługa strumienia zmian w usłudze Azure Cosmos DB polega na nasłuchiwaniu zmian w kontenerze bazy danych. Następnie zwraca posortowaną listę zmienionych dokumentów w kolejności, w której zostały zmodyfikowane. Gdy aplikacja nasłuchuje zestawienia zmian, może automatycznie reagować na zmiany danych.
usługi Azure Functions: kluczową różnicą między tą funkcją a oryginalną funkcją
getStocks
jest to, że funkcja jest obecnie wyzwalana przez zmiany w naszych danych. W poprzednim ćwiczeniu wyzwoliliśmy naszą funkcję na podstawie żądań od klienta i wycofaliśmy wszystkie dane za pośrednictwem powiązania wejściowego usługi Azure Cosmos DB. Użycie wyzwalacza usługi Azure Cosmos DB automatycznie zwiększa wydajność pobierania danych. Usługa Azure Functions oferuje powiązanie, które uruchamia kod w dowolnym momencie aktualizowania danych w kanale zmian usługi Azure Cosmos DB. Gdy funkcja nasłuchuje zestawienia zmian, możesz pracować z podzbiorem danych, który po prostu reprezentuje zmiany danych.Azure SignalR: Ta usługa zapewnia dwukierunkową komunikację z połączeniem SignalR po stronie klienta, które nasłuchuje transmisji SignalR z aplikacji Azure Functions.
SignalR i połączenia trwałe
W przeciwieństwie do sondowania, bardziej korzystny projekt obejmuje trwałe połączenia między klientem a serwerem. Ustanowienie trwałego połączenia umożliwia serwerowi dostarczanie danych do klienta według własnego uznania. Charakter połączenia na żądanie zmniejsza ruch sieciowy i obciążenie serwera. Usługa SignalR umożliwia łatwe dodawanie architektury tego typu do aplikacji.
SignalR to abstrakcja 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 emisję komunikatów do wszystkich połączonych klientów jednocześnie, takich jak pokój rozmów. Możesz również wysyłać komunikaty do określonych klientów. Połączenie między klientem a serwerem jest trwałe, w przeciwieństwie do klasycznego połączenia HTTP, które jest ponownie ustanawiane dla każdej komunikacji.
Kluczową zaletą abstrakcji zapewnianej przez usługę SignalR jest sposób, w jaki obsługuje mechanizmy zapasowe transportu. Transport to metoda komunikacji między klientem a serwerem. Połączenia usługi SignalR zaczynają się od standardowego żądania HTTP. Gdy serwer ocenia połączenie, wybierana jest najbardziej odpowiednia metoda komunikacji (transport). W przypadku połączenia trwałego z klientem funkcja może kontaktować się z poszczególnymi klientami na żądanie, co jest podstawą architektury aplikacji w czasie rzeczywistym. Transporty są wybierane w zależności od interfejsów API dostępnych na kliencie:
- HTML 5: Dla klientów obsługujących HTML 5, domyślnie używany jest transport interfejsu API WebSockets.
- WebSocket: Jeśli klient nie obsługuje WebSocket, usługa SignalR powraca do Server Sent Events (znanych również jako EventSource).
- Inna technologia: w przypadku starszych klientów, długie sondowanie Ajax lub ramka Forever (tylko w IE) są używane do naśladowania połączenia dwukierunkowego.
Warstwa abstrakcji oferowana przez usługę SignalR zapewnia dwie korzyści aplikacji. Pierwszą zaletą jest zabezpieczenie aplikacji na przyszłość. W miarę jak internet się rozwija i pojawiają się API przewyższające WebSocket, twoja aplikacja nie musi się 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 umożliwia aplikacji bezpieczne obniżenie wydajności w zależności od obsługiwanych technologii klienta. Jeśli nie obsługuje WebSockets, zostaną użyte Server-Sent Events. Jeśli klient nie może obsługiwać zdarzeń wysyłanych przez serwer, wtedy używa długiego sondowania przy użyciu Ajaxa itd.
Przyjrzyjmy się, jak używać usługi SignalR do emisji informacji z funkcji, która odczytuje zestawienie zmian usługi Azure Cosmos DB.