1. Mis on SignalR: ASP.NET SignalR on klasside raamatukogu, mis on loodud arendusarendajate poolt rakendustesse reaalajas veebisisu lisamise protsessi lihtsustamiseks. Reaalajas veebifunktsionaalsus tähendab serveri koodi lubamist aktiivselt klientidele igal ajal sisu saata, selle asemel et server ootaks kliendi päringut (enne sisu tagastamist). Kõik "reaalajas" veebifunktsionaalsused saab lisada sinu ASP.NET rakendusse SignalR-i abil. Kõige sagedamini kasutatav näide on jututubad, kuid me saame teha palju enamat. Võta arvesse järgmisi olukordi: kasutajad peavad pidevalt veebilehte värskendama, et näha viimaseid andmeid; Või hankida (ja kuvada) lehel uusi andmeid, rakendades pikka küsitlust, siis võid kaaluda SignalR-i kasutamist selleks. Näiteks: juhtpaneelid ja jälgimisrakendused; Koostöörakendused (nt mitu inimest, kes redigeerivad dokumente samaaegselt); Töö edenemise uuendused ja reaalajas esitlusvormid jne. SignalR sobib ka uuematele veebirakendustele, mis vajavad serverilt kõrgsageduslikke uuendusi, näiteks reaalajas mängimiseks. Siin on hea näide: ShoorR. SignalR pakub kasutajatele lihtsat API-d, et luua serveri-kliendi kaugprotseduuri kutseid (RPC), millele pääseb serveripoolselt hõlpsasti ligi. Võrgukood. SignalR sisaldab ka ühendusi (nt ühenduse ja ühenduse katkestamise sündmusi) ning ühenduste grupeerimist.
SignalR suudab automaatselt ühendusi hallata. Ja võimaldab saata ringhäälingusõnumeid kõigile ühendatud klientidele, nagu jututuba. Loomulikult saad lisaks massilisele saatmisele saata sõnumeid ka konkreetsetele klientidele. Kliendi ja serveri vaheline ühendus on püsiv, erinevalt traditsioonilisest HTTP protokollist, mis nõuab iga suhtluse jaoks ühenduse taasloomist. SignalR toetab "server push" funktsiooni, kus serveri kood saab brauseris kutsuda kliendikoodi kaugprotseduuride kutsete (RPC) abil, mitte päringuid, mida praegu veebis tavaliselt kasutatakse – vastavat töötlemismudelit. SignalR rakendusi saab laiendada tuhandetele klientidele Service Busi, SQL SERVERi või Redis'i abil. SignalR on avatud lähtekoodiga ja sellele pääseb ligi GitHubi kaudu.
2. SignalR ja WebSocket
ignalR kasutab võimalusel WebSocketi transpordimeetodit. Ja automaatselt lülitu vanale transpordimeetodile (nt HTTP pikk ühendus). Kindlasti saab oma rakenduse otse WebSocketsiga kirjutada, kuid SignalR-i kasutamine annab rohkem lisafunktsionaalsust ilma ratast uuesti leiutamata. Kõige tähtsam on, et saad keskenduda ärilisele rakendusele, ilma et peaksid mõtlema sobiva koodi loomisele eraldi vana kliendi jaoks. SignalR võimaldab vältida muretsemist WebSocketi uuenduste pärast, kuna SignalR jätkab uuendamist, et toetada muutvaid transpordimeetodeid, et pakkuda ühtlast ligipääsuliidest rakendustele erinevates WebSocketide versioonides. Loomulikult saab luua lahenduse, mis kasutab ainult WebSocketi transporti, ja SignalR pakub kõiki funktsioone, mida võib vaja minna oma koodi kirjutamiseks, näiteks pöörduda tagasi teiste transpordimeetodite juurde ja muuta rakendust uuemate WebSocketi rakenduste jaoks.
3. Transport ja tagasipöördumine
SignalR on abstraktsioon transporditehnoloogiast, mis on vajalik reaalajas funktsioonide rakendamiseks klientide ja serverite vahel. SignalR alustab esmalt ühendust HTTP-ga ja kontrollib, kas WebSocket on saadaval – kui see on kindel, uuenda WebSocketi ühendusele. WebSocket on SignalR-i jaoks kõige ideaalsem edastusmeetod, kuna see kasutab serveri mälu kõige tõhusamalt, omab madalaimat latentsust ja põhjalikke alusfunktsioone (näiteks täisdupleks-side kliendi ja serveri vahel), kuid sellel on ka kõige rangemad nõuded: server peab kasutama Windows Server 2012 või Windows 8 operatsioonisüsteemi ja samal ajal. .NET raamistik versioon 4.5 ja uuem. Kui neid nõudeid ei täideta, püüab SignalR kasutada alternatiivset edastusmeetodit ühenduse loomiseks.
4. HTML5 saatmine
Kasutatav transpordimeetod sõltub sellest, kas kliendibrauser toetab HTML5, vastasel juhul kasutatakse vana transpordimeetodit. WebSocket (kui nii server kui ka brauser toetavad WebSocketi). WebSocket on ainus viis tõelise ja vastupidava kahepoolse ühenduse loomiseks nii kliendi kui serveri poolel. Muidugi on WebSocketil ka kõige rangemad nõuded: seda toetavad ainult IE, Chrome ja FF uusimad versioonid ning see on osaliselt rakendatud teistes brauserites nagu Opera ja Safari. Server saadab sündmusi, tuntud ka kui EventSource (kui brauser toetab serveri saatmise sündmusi, siis põhimõtteliselt kõik brauserid peale IE toetavad seda funktsiooni).
5. Komeedi ülekanne
Järgmised transporditüübid põhinevad Comet veebirakenduse mudelil, kus brauser või klient hoiab pikka HTTP-ühenduse päringut ning server saab andmeid kliendile saata ilma kliendi otsese päringuta. Forever Frame (ainult IE) Forever Frame loob peidetud IFrame'i, mis saadab serverile päringu, mida ei lõpetata. Server saadab seejärel pidevalt skripte kliendile ja klient käivitab need kohe, st ühesuunaline reaalajas ühendus serverist kliendile. Kliendi-server ühendus kasutab teistsugust ühendust kui see ühendus. Näiteks tavaline HTML-päring loob iga saadetud andme jaoks uue ühenduse. Ajaxi pikk küsitlus ei loo püsivat ühendust, vaid küsib, tehes pidevalt päringuid serverile. Oota, kuni server vastab ja sulgeb selle ühenduse igal ühendusel, ning tee kohe uus taotlus. Loomulikult põhjustab see ühenduse lähtestamisel ja taasühendamisel mõningast viivitust. Erinevate konfiguratsioonide poolt toetatavate transpordimeetodite kohta leiate teavet jaotisest Toetatud platvormid. (IE nõuab 8 või rohkem, teised brauserid on praeguse versiooniga -1) Ülekandemeetodi valikuprotsess Järgmine nimekiri näitab, kuidas SignalR otsustab, millist tüüpi kasutada edastuseks. IE8 ja varasemad kasutavad pikka küsitlust. Kui JSONP on seadistatud (st jsonp parameeter on ühendatud tõeks), kasuta pikka päringut. Kui kasutate domeenideülest ühendust (st SignalR lõpp-punkt ja leht ei ole samas domeenis), kasutage WebSockets'i, kui täidetud on järgmised tingimused: Klient toetab domeenideülest ressursside jagamist (CORS), vt CORS kohta täpsemat infot Klient toetab WebSocketi Server toetab WebSocket'i Kui mõni ülaltoodud tingimustest ei ole täidetud, kasutatakse pikka küsitlust. Lisateabe saamiseks domeenideüleste ühenduste kohta vaata "Kuidas luua domeenideülesed ühendused". Kui sa ei seadista JSONP kasutamist ja ühendus ei ole domeenideülene, kasuta loomulikult WebSocketi, eeldusel, et nii klient kui server toetavad WebSocketi. Kui klient või server ei toeta WebSockete, kasuta serverit sündmuste saatmiseks. Kui server saadab, et sündmus pole saadaval, kasuta Forever Frame'i. Kui Forever Frame pole saadaval, kasuta pikka päringut. Monitori edastus Saad näha, millist transpordimeetodit su rakendus kasutab, lubades Hub logimise ja brauseri konsoolis. Logimise lubamiseks lisa kliendirakendusse järgmine käsk: nnection.hub.logging = tõene;
6. Ülevaatus ja transport:
Saad näha, millist transpordimeetodit su rakendus kasutab, lubades Hub logimise ja brauseri konsoolis. Logimise lubamiseks lisa kliendirakendusse järgmine käsk: nnection.hub.logging = tõene; $.connection.hub.logging = true; IE-s vajuta F12, et avada arendaja tööriistad, ja klõpsa Console vahekaardil.
Chrome'is vajuta Ctrl+Shift+J, et konsool avada
Konsoolis logimist jälgides näed SignalR-i kasutatavat edastusmeetodit.
7. Määratud laevandus:
Edastusmeetodi läbirääkimine nõuab teatud aega ja serveri/kliendi ressursse. Kui kliendikeskkond on teada, saab transpordimeetodi määrata ühenduse alguses, et parandada jõudlust. Järgmine kood demonstreerib Ajaxi pika päringu kasutamist otse ühenduse alguses, kui klient toetab mõnda muud protokolli: connection.start({ transport: 'longPolling' }); Kui soovid, et klient läbiräägiks transpordi kindlas järjekorras, saad määrata läbirääkimiste järjekorra. Allolev kood näitab, kuidas proovida esmalt WebSockets'i kasutada ja pärast ebaõnnestumist kasutada pikka päringut. connection.start({ transport: ['webSockets','longPolling'] }); Kasutaja poolt määratud stringikonstandid on järgmised: webSockets forverFrame serverSentEvents longPolling
8. Ühendused ja keskused SignalR API sisaldab kahte kliendi-serveri suhtlusmudelit: püsivaid ühendusi ja keskpunkte.
Ühendus tähistab lihtsat lõpp-punkti ühe, grupitud või levitatud sõnumi saatmiseks. PersistentConnection API (mida .NET koodis esindab PersistentConnection klass) annab arendajatele otsese juurdepääsu SignalR-i aluseks olevale kommunikatsiooniprotokollile. Arendajad, kes on kasutanud ühenduspõhiseid API-sid nagu WCF, tunnevad paremini ühenduskommunikatsiooni mudelit. Keskused on API-põhised, kuid kõrgema taseme kommunikatsioonitorud, mis võimaldavad klientidel ja serveritel kutsuda meetodeid otse üksteisele. SignalR teeb suurepärast tööd masinateülese ajastamise haldamisel, võimaldades klientidel hõlpsasti kutsuda serveris meetodeid justkui kutsuksid nad kohalikke meetodeid ja vastupidi. Arendajad, kes on kasutanud kaugkõnepõhiseid AIP-sid nagu .Net Remoting, tunnevad hub-mudelit paremini. Hubi abil saad ka tugevalt tüübistatud parameetreid meetoditele edasi anda ja neid mudeliga siduda.
Arhitektuuridiagramm: Allolev diagramm näitab seost sõlmpunkti, pideva ühenduse ja transpordiks kasutatava tehnoloogia vahel.
9. Kuidas keskus töötab:
Kui serveri kood kutsub klienti, saadab server kliendile paketi, mis sisaldab kutsuvat meetodit ja parameetreid (kui objekti kasutatakse metoodiparameetrina, serialiseeritakse see JSON-ina saatmiseks). Klient kontrollib seejärel vastuvõetud meetodi nime ja teeb vastavusotsingu kliendi määratud meetodis ning kui sobitus õnnestub, käivitatakse meetod ja deserialiseeritud objekti kasutatakse meetodi parameetrina. Saad kasutada tööriistu nagu Fiddler, et jälgida meetodite kutse täitmist. Järgmine pilt näitab meetodit, mis on salvestatud Fiddleri logidest ja saadetakse SignalR serverist veebibrauseri kliendile. Hubist algatatud meetod kannab nime MoveShapeHub ja meetod updateShape.
Selles näites tuvastatakse keskuse nimi parameetriga "H", meetodi nimi parameetriga "M" ja meetodile saadetud parameetri objekt parameetriga "A". Rakendus, mis sõnumi genereeris, rakendati kõrgsagedusliku reaalajas suhtluse õpetuses. Vali suhtlusmudel: Enamik rakendusi kasutab keskuse API-d, mida saab kasutada järgmistes olukordades: Pead täpsustama, millises formaadis sõnum saadetakse. Arendajad eelistavad kasutada sõnumite ja ajastamise mudelit kaugkõnede mudeli asemel Sõnumimudelit kasutatakse olemasolevates rakendustes ja plaanitakse see portida SignalR-ile.
|