1. Čo je SignalR: ASP.NET SignalR je knižnica kurzov, ktoré sú poskytované vývojármi na zjednodušenie procesu pridávania živého webového obsahu do aplikácií. Webová funkcionalita v reálnom čase znamená umožniť serverovému kódu aktívne posielať obsah klientom kedykoľvek, namiesto toho, aby server čakal na požiadavku od klienta (pred vrátením obsahu). Všetky "živé" typy webových funkcií je možné pridať do vašej ASP.NET aplikácie pomocou SignalR. Najčastejšie používaným príkladom sú chatovacie miestnosti, ale môžeme urobiť oveľa viac. Zvážte nasledujúce situácie: používatelia musia neustále obnovovať webovú stránku, aby videli najnovšie údaje; Alebo získať (a zobraziť) nové dáta na stránke implementáciou dlhého pollingu, potom môžete zvážiť použitie SignalR. Napríklad: dashboardy a monitorovacie aplikácie; Kolaboratívne aplikácie (napr. viacerí ľudia upravujúci dokumenty súčasne); Aktualizácie pracovného postupu a formuláre na prezentácie v reálnom čase, atď. SignalR je tiež vhodný pre novšie typy webových aplikácií, ktoré vyžadujú vysokofrekvenčné aktualizácie zo servera, ako je hranie hier v reálnom čase. Tu je dobrý príklad: ShoorR. SignalR poskytuje jednoduché API pre používateľov na vytváranie vzdialených procedúr server-klient (RPC), ktoré sú ľahko prístupné zo serverovej strany. Sieťový kód. SignalR tiež zahŕňa spojenia (napr. udalosti spojenia a odpojenia) a zoskupovanie spojení.
SignalR dokáže automaticky spravovať pripojenia. A umožňuje vám posielať vysielané správy všetkým pripojeným klientom, podobne ako chatovacia miestnosť. Samozrejme, okrem hromadného odosielania môžete posielať správy aj konkrétnym klientom. Spojenie medzi klientom a serverom je trvalé, na rozdiel od tradičného HTTP protokolu, ktorý vyžaduje obnovenie spojenia pre každú komunikáciu. SignalR podporuje funkciu "server push", kde serverový kód môže volať klientsky kód v prehliadači pomocou vzdialených volaní procedúr (RPC) namiesto požiadaviek bežne používaných na webe – zodpovedajúceho modelu spracovania. Aplikácie SignalR je možné rozšíriť na tisíce klientov pomocou Service Bus, SQL SERVER alebo Redis. SignalR je open-source a je prístupný cez GitHub.
2. SignalR a WebSocket
ignalR používa metódu transportu WebSocket – kde je to možné. A automaticky prepnúť na starý spôsob prenosu (napr. HTTP dlhé pripojenie). Určite môžete napísať svoju aplikáciu priamo cez WebSockets, ale používanie SignalR znamená, že budete mať viac nových funkcií bez nutnosti vymýšľať koleso nanovo. Najdôležitejšie je, že sa môžete sústrediť na obchodnú implementáciu bez toho, aby ste museli samostatne vytvárať kompatibilný kód pre starého klienta. SignalR vám tiež umožňuje vyhnúť sa obavám z aktualizácií WebSocketu, keďže SignalR bude naďalej aktualizovaný, aby podporoval meniace sa základné transportné metódy a poskytoval konzistentné prístupové rozhranie pre aplikácie naprieč rôznymi verziami WebSockets. Samozrejme, môžete vytvoriť riešenie, ktoré využíva iba WebSocket transport, a SignalR poskytuje všetky funkcie, ktoré môžete potrebovať na písanie vlastného kódu, napríklad návrat k iným transportným metódam a úpravu aplikácie pre novšie WebSocket implementácie.
3. Doprava a návrat
SignalR je abstrakciou transportnej technológie potrebnej na implementáciu funkcií v reálnom čase medzi klientmi a servermi. SignalR najprv spustí spojenie pomocou HTTP a skontroluje, či je WebSocket dostupný – ak áno, upgradujte na pripojenie WebSocketu. WebSocket je najideálnejšou metódou prenosu pre SignalR, pretože najefektívnejšie využíva pamäť servera, má najnižšiu latenciu a komplexné základné funkcie (napríklad plnú duplexnú komunikáciu medzi klientom a serverom), ale zároveň má najprísnejšie požiadavky: server musí používať operačný systém Windows Server 2012 alebo Windows 8 a zároveň. .NET framework verzia 4.5 a vyššia. Ak tieto požiadavky nie sú splnené, SignalR sa pokúsi použiť alternatívny spôsob prenosu na pripojenie.
4. Doručenie v HTML5
Použitý spôsob prenosu závisí od toho, či klientský prehliadač podporuje HTML5, inak sa použije starý spôsob prenosu. WebSocket (ak server aj prehliadač podporujú WebSocket). WebSocket je jediný spôsob, ako vytvoriť skutočné a odolné obojsmerné spojenie na strane klienta aj servera. Samozrejme, WebSocket má aj najprísnejšie požiadavky: je podporovaný len v najnovších verziách IE, Chrome a FF a je len čiastočne implementovaný v iných prehliadačoch, ako sú Opera a Safari. Server odosiela udalosti, známe aj ako EventSource (ak prehliadač podporuje odosielanie udalostí na server, v podstate všetky prehliadače okrem IE túto funkciu podporujú).
5. Prenos kométy
Nasledujúce typy transportu sú založené na webovom aplikačnom modeli Comet, kde prehliadač alebo klient udržiava dlhý HTTP požiadavku na pripojenie a server môže klientovi posielať dáta bez explicitnej požiadavky od klienta. Forever Frame (iba IE) Forever Frame vytvorí skrytý IFrame, ktorý odošle požiadavku na server, ktorá nebude dokončená. Server potom neustále odosiela skripty klientovi a klient ich okamžite vykoná, t. j. jednosmerné spojenie v reálnom čase zo servera na klienta. Klient-server spojenie používa iné spojenie ako toto pripojenie. Napríklad štandardný HTML požiadavka vytvorí nové spojenie pre každé odoslané dáto. Ajax long polling nevytvára trvalé spojenie, ale skôr polluje neustálym odosielaním požiadaviek na server. Počkajte na odpoveď servera a ukončite toto spojenie pri každom pripojení, a potom okamžite urobte novú požiadavku. Samozrejme, to spôsobí oneskorenie pri resetovaní a opätovnom pripojení spojenia. Pre informácie o transportných metódach podporovaných rôznymi konfiguráciami pozri Podporované platformy. (IE vyžaduje 8 alebo viac, iné prehliadače majú aktuálnu verziu -1) Proces výberu metódy prenosu Nasledujúci zoznam ukazuje, ako SignalR rozhoduje, ktorý typ použije na vysielanie. IE8 a staršie používajte dlhé pollingy. Ak je JSONP nastavený (t. j. parameter jsonp je pri pripájaní nastavený na true), použite dlhé polling. Ak používate medzidoménové pripojenie (t. j. koncový bod SignalR a stránka nie sú v rovnakej doméne), použite WebSockets, ak sú splnené nasledujúce podmienky: Klient podporuje zdieľanie zdrojov naprieč doménami (CORS), podrobnosti nájdete na CORS Klient podporuje WebSocket Server podporuje WebSocket Ak niektorá z vyššie uvedených podmienok nie je splnená, použije sa dlhý prieskum. Pre viac informácií o medzidoménových spojeniach pozri Ako nadviazať medzidoménové spojenia. Ak nekonfigurujete používanie JSONP a pripojenie nie je cross-domain, použite WebSocket, samozrejme, za predpokladu, že WebSocket podporujú klient aj server. Ak klient alebo server WebSockets nepodporuje, použite server na odosielanie udalostí. Ak server pošle udalosť nie je dostupná, použite Forever Frame. Ak Forever Frame nie je dostupný, použite dlhé ankety. Monitorovanie vysielania Spôsob prenosu vašej aplikácie si môžete pozrieť zapnutím Hub logovania a v konzole prehliadača. Na povolenie logovania pridajte do klientskej aplikácie nasledujúci príkaz: nnection.hub.logging = pravda;
6. Kontrola a preprava:
Spôsob prenosu vašej aplikácie si môžete pozrieť zapnutím Hub logovania a v konzole prehliadača. Na povolenie logovania pridajte do klientskej aplikácie nasledujúci príkaz: nnection.hub.logging = pravda; $.connection.hub.logging = pravda; V IE stlačte F12 na otvorenie vývojárskych nástrojov a kliknite na kartu Konzola.
V Chrome stlačte Ctrl+Shift+J na otvorenie konzoly
Pozorovaním logovania v konzole môžete vidieť spôsob prenosu, ktorý SignalR používa.
7. Určená preprava:
Vyjednávanie spôsobu prenosu si vyžaduje určitý čas a zdroje servera/klienta. Ak je prostredie klienta známe, potom je možné pri iniciovaní pripojenia špecifikovať spôsob prenosu na zlepšenie výkonu. Nasledujúci kód demonštruje použitie dlhého dotazovania Ajaxu priamo pri iniciácii spojenia, ak je známe, že klient podporuje iný protokol: connection.start({ transport: 'longPolling' }); Ak chcete, aby klient vyjednával prepravu v konkrétnom poradí, môžete určiť poradie, v akom sa vyjednávanie pokúša. Kód nižšie ukazuje, ako najskôr skúsiť použiť WebSockets a po neúspechu použiť dlhé pollovanie. connection.start({ transport: ['webSockets','longPolling'] }); Konštanty reťazca, ktoré používateľ zadá, sú definované nasledovne: webSockets forverFrame serverSentEvents longPolling
8. Spojenia a huby API SignalR zahŕňa dva modely komunikácie klient-server: perzistentné pripojenia a huby.
Spojenie predstavuje jednoduchý koncový bod pre odoslanie jednej, zoskupenej alebo vysielanej správy. API PersistentConnection (reprezentované triedou PersistentConnection v .NET kóde) poskytuje vývojárom priamy prístup k základnému komunikačnému protokolu SignalR. Vývojári, ktorí používali API založené na spojení, ako je WCF, budú s modelom komunikácie pripojenia oboznámení lepšie. Huby sú API-založené, ale vyššie úrovňové komunikačné pipeline, ktoré umožňujú klientom a serverom volať metódy priamo medzi sebou. SignalR výborne zvláda plánovanie medzi strojmi, umožňuje klientom jednoducho volať metódy na serveri, akoby volali lokálne metódy, a naopak. Vývojári, ktorí používali AIP založené na vzdialených hovoroch, ako je .Net Remoting, budú s modelom hubu lepšie oboznámení. Pomocou hubu môžete tiež posielať silne typované parametre metódam a priradiť ich k modelu.
Schéma architektúry: Diagram nižšie ukazuje vzťah medzi uzlom, nepretržitým spojením a technológiou používanou na prepravu.
9. Ako hub funguje:
Keď serverový kód volá klienta, server odošle klientovi paket obsahujúci volajúcu metódu a parametre (keď je objekt použitý ako parameter metódy, bude serializovaný ako JSON na odoslanie). Klient potom skontroluje prijatý názov metódy a vykoná vyhľadávanie zhody v klientom definovanej metóde, a ak je zhoda úspešná, metóda sa vykoná a deserializovaný objekt sa použije ako parameter metódy. Môžete použiť nástroje ako Fiddler na monitorovanie vykonávania volania metódy. Nasledujúci obrázok ukazuje metódu zachytenú z logov Fiddleru, ktorá sa má odoslať zo servera SignalR klientovi webového prehliadača. Metóda iniciovaná z hubu sa volá MoveShapeHub a metóda sa volá updateShape.
V tomto príklade je názov uzla identifikovaný s parametrom "H", názov metódy s parametrom "M" a parameter object zaslaný metóde je identifikovaný s parametrom "A". Aplikácia, ktorá správu generovala, bola implementovaná v tutoriáli vysokofrekvenčnej komunikácie v reálnom čase. Vyberte si model komunikácie: Väčšina aplikácií používa API hubu, ktoré je možné použiť v nasledujúcich situáciách: Musíte špecifikovať formát, v akom je správa odoslaná. Vývojári uprednostňujú model správy a plánovania pred modelom vzdialených hovorov Model správ sa používa v existujúcich aplikáciách a plánuje sa jeho portovanie na SignalR.
|