Povolení automatických aktualizací ve webové aplikaci pomocí služby SignalR
Dále se přestaneme zaměřovat na dotazování a přejdeme k aplikaci, která odesílá aktualizace dat do připojených klientů v reálném čase. Tento nový návrh snižuje provoz a zefektivňuje uživatelské rozhraní tím, že se aktualizuje pouze při změnách dat. Tři technologie, které používáme k poskytování tohoto aktualizovaného řešení, jsou Azure Cosmos DB, Azure Functionsa SignalR.
Azure Cosmos DB: Při změnách dat v databázi služba Azure Cosmos DB zpřístupňuje kanál změn. Podpora kanálu změn ve službě Azure Cosmos DB funguje nasloucháním databázovému kontejneru při změnách. Potom vypíše seřazený seznam změněných dokumentů v pořadí, v jakém byly změněny. Když vaše aplikace naslouchá kanálu změn, může automaticky reagovat na změny dat.
azure Functions: Klíčovým rozdílem mezi touto funkcí a původní funkcí
getStocks
je to, že se teď funkce aktivuje na základě změn našich dat. V předchozím cvičení jsme aktivovali naši funkci na základě požadavků z klienta a stáhli všechna data prostřednictvím vstupní vazby Azure Cosmos DB. Použití triggeru služby Azure Cosmos DB automaticky zvyšuje efektivitu načítání dat. Azure Functions nabízí vazbu, která spouští kód pokaždé, když se data aktualizují v kanálu změn služby Azure Cosmos DB. Jakmile funkce začne naslouchat změnovému kanálu, můžete pracovat s podmnožinou dat, která reprezentuje pouze změny.Azure SignalR: Tato služba poskytuje 2cestnou komunikaci s připojením SignalR na klientovi, který naslouchá vysílání SignalR z aplikace Azure Functions.
SignalR a trvalá připojení
Na rozdíl od dotazování má příznivější architektura trvalá připojení mezi klientem a serverem. Vytvoření trvalého připojení umožňuje serveru odesílat data klientovi najednou. Povaha připojení na vyžádání snižuje síťový provoz a zatížení serveru. SignalR umožňuje snadno přidat tento typ architektury do aplikace.
signalR je abstrakce pro řadu technologií, které vaší aplikaci umožňují využívat obousměrnou komunikaci mezi klientem a serverem. SignalR zpracovává správu připojení automaticky a umožňuje vysílat zprávy všem připojeným klientům současně, jako je chatovací místnost. Můžete také odesílat zprávy konkrétním klientům. Připojení mezi klientem a serverem je trvalé, na rozdíl od klasického připojení HTTP, které se pro každou komunikaci znovu naváže.
Klíčovou výhodou abstrakce poskytované službou SignalR je podpora náhradních mechanismů pro dopravu. Přenos je metoda komunikace mezi klientem a serverem. Připojení SignalR začínají standardním požadavkem HTTP. Vzhledem k tomu, že server vyhodnotí připojení, je vybrána nejvhodnější metoda komunikace (přenos). Při spárování s trvalým připojením k klientovi může funkce kontaktovat jednotlivé klienty na vyžádání, což je základem architektury aplikace v reálném čase. Přenosy se vyberou v závislosti na rozhraních API dostupných v klientovi:
- HTML 5: Pro klienty, kteří podporují HTML 5, se ve výchozím nastavení používá přenos rozhraní API WebSockets.
- WebSockets: Pokud klient nepodporuje protokoly WebSockets, vrátí se SignalR zpět na události odesílané serverem (označované také jako EventSource).
- Jiné technologie: Pro starší klienty se k napodobení obousměrného připojení používá rozhraní Ajax long polling nebo Forever Frame (pouze IE).
Abstraktní vrstva nabízená službou SignalR poskytuje vaší aplikaci dvě výhody. První výhodou je zajištění budoucí odolnosti vaší aplikace. Vzhledem k tomu, že se web vyvíjí a rozhraní API vyšší než WebSockets budou k dispozici, nemusí se vaše aplikace měnit. Můžete aktualizovat na verzi služby SignalR, která podporuje všechna nová rozhraní API, a nemusíte přepracovat kód aplikace.
Druhou výhodou je, že SignalR umožňuje vaší aplikaci elegantně snížit výkon v závislosti na podporovaných technologiích klienta. Pokud nepodporuje WebSockets, použijí se Server-Sent Events. Pokud klient nemůže zpracovat serverem zasílané události, používá dlouhé dotazování Ajax nebo podobné techniky.
Pojďme se podívat, jak používat SignalR k vysílání informací z funkce, která čte změnový kanál služby Azure Cosmos DB.