Umožnění automatických aktualizací webové aplikace pomocí služby SignalR

Dokončeno

Webová aplikace založená na dotazování

V dalším kroku se odpojíme od dotazování a k aplikaci, která do připojených klientů odesílají aktualizace dat (jak nastanou). Tato nová koncepce snižuje provoz na webu a zefektivňuje uživatelské rozhraní, které se aktualizuje pouze při změně dat. Tři technologie, které používáme k poskytování tohoto aktualizovaného řešení, jsou Azure Cosmos DB, Azure Functions a 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. K podpoře kanálu změn využívá Azure Cosmos DB naslouchání změnám v kontejneru databáze. Potom vypíše seřazený seznam změněných dokumentů v pořadí, ve kterém byly upraveny. 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í getStocks funkcí je to, že se teď funkce aktivuje na základě změn našich dat. V předchozím cvičení jsme funkci aktivovali na základě žádosti od klienta a všechna data si vyžádali zpět prostřednictvím vstupní vazby Azure Cosmos DB. Použití triggeru služby Azure Cosmos DB automaticky zvyšuje efektivitu načítání dat. Služba Azure Functions obsahuje vazbu, která spustí kód vždy, když v kanálu změn Azure Cosmos DB dojde k aktualizaci dat. Jakmile funkce naslouchá kanálu změn, můžete pracovat s podmnožinou svých dat, která představuje jenom změny dat.

  • 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í

Architektura výhodnější než dotazování zahrnuje trvalá připojení mezi klientem a serverem. Vytvoření trvalého připojení umožňuje serveru odesílat klientovi data podle potřeby. Povaha připojení, které se využívá na vyžádání, snižuje provoz v síti a zatížení serveru. Se službou SignalR můžete tento typ architektury snadno přidat do svých aplikací.

SignalR je abstrakcí pro řadu technologií, které vaší aplikaci umožňují těžit z obousměrné komunikace mezi klientem a serverem. Služba SignalR automaticky řeší správu připojení a dovoluje vám vysílat zprávy pro všechny připojené klienty najednou, jako v chatovací místnosti. 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 při každé komunikaci obnovuje.

Klíčovou výhodou abstrakce poskytované službou SignalR je způsob, jakým řeší podporu nouzových situací při přenosu. Přenos je metoda komunikace mezi klientem a serverem. Připojení SignalR začínají standardním požadavkem HTTP. Jakmile server připojení vyhodnotí, je vybrána nejvhodnější metoda komunikace (přenos). V kombinaci s trvalým připojením ke klientovi může tato funkce kontaktovat jednotlivé klienty na vyžádání, což je základ architektury aplikací reagujících 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 odeslané serverem (označované také jako EventSource).
  • Další technologie: U starších klientů se k napodobení obousměrného připojení používá ajax dlouhé dotazování nebo Forever Frame (pouze IE).

Vrstva abstrakce nabízená službou SignalR poskytuje vaší aplikaci dvě výhody. První spočívá v přípravě aplikace na budoucnost. Ta se nebude muset měnit, až se s rozvojem webu objeví vyspělejší rozhraní API než WebSocket. 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 vaší aplikaci umožňuje plynule degradovat podle toho, jaké technologie klient podporuje. Pokud klient nepodporuje protokoly WebSocket, použijí se odeslané události serveru. Pokud klient nedokáže zpracovat odeslané události serveru, využijí se dlouhé intervaly dotazování Ajax a tak dále.

Pojďme se podívat, jak používat SignalR k vysílání informací z funkce, která čte kanál změn služby Azure Cosmos DB.