1. Hva er SignalR: ASP.NET SignalR er et bibliotek av klasser som tilbys for å forenkle prosessen med å legge til levende webinnhold i applikasjoner av utviklingsutviklere. Sanntids webfunksjonalitet refererer til å la serverkode aktivt sende innhold til klienter når som helst, i stedet for at serveren venter på en forespørsel fra klienten (før innholdet returneres). Alle "live" typer webfunksjonalitet kan legges til i din ASP.NET-applikasjon ved hjelp av SignalR. Det mest brukte eksempelet er chatrom, men vi kan gjøre mye mer enn det. Vurder følgende situasjoner: brukere må kontinuerlig oppdatere nettsiden for å se de nyeste dataene; Eller hent (og vis) nye data på siden ved å implementere lang polling, så kan du vurdere å bruke SignalR til dette. For eksempel: dashbord og overvåkingsapplikasjoner; Samarbeidsapplikasjoner (f.eks. flere personer som redigerer dokumenter samtidig); Oppdateringer om jobbfremgang og presentasjonsskjemaer i sanntid, osv. SignalR er også egnet for nyere typer webapplikasjoner som krever høyfrekvente oppdateringer fra serveren, som sanntidsspill. Her er et godt eksempel: ShoorR. SignalR tilbyr et enkelt API for brukere til å lage server-til-klient fjernprosedyrekall (RPC) som enkelt kan nås fra serversiden. Nettkode. SignalR inkluderer også tilkoblinger (f.eks. tilkoblings- og frakoblingshendelser) og tilkoblingsgruppering.
SignalR kan automatisk administrere forbindelser. Og lar deg sende kringkastingsmeldinger til alle tilknyttede klienter, akkurat som et chatterom. Selvfølgelig, i tillegg til masseutsendelse, kan du også sende meldinger til spesifikke kunder. Forbindelsen mellom klient og server er vedvarende, i motsetning til den tradisjonelle HTTP-protokollen, som krever at tilkoblingen gjenopprettes for hver kommunikasjon. SignalR støtter "server push"-funksjonen, hvor serverkode kan kalle klientkode i nettleseren ved å bruke fjernprosedyrekall (RPC) i stedet for forespørsler som i dag ofte brukes på nettet – den tilsvarende behandlingsmodellen. SignalR-applikasjoner kan utvides til tusenvis av klienter ved bruk av Service Bus, SQL SERVER eller Redis. SignalR er åpen kildekode og kan nås via GitHub.
2. SignalR og WebSocket
ignalR bruker WebSocket-transportmetoden – der det er mulig. Og automatisk bytte til den gamle transportmetoden (f.eks. HTTP lang tilkobling). Du kan absolutt skrive applikasjonen din direkte med WebSockets, men ved å bruke SignalR får du mer ekstra funksjonalitet uten å måtte finne opp hjulet på nytt. Det viktigste er at du kan fokusere på forretningsimplementeringen uten å måtte lage kompatibel kode separat for den gamle klienten. SignalR lar deg også unngå å bekymre deg for WebSocket-oppdateringer, siden SignalR vil fortsette å bli oppdatert for å støtte endringer i underliggende transportmetoder for å tilby et konsistent tilgangsgrensesnitt for applikasjoner på tvers av ulike versjoner av WebSockets. Selvfølgelig kan du lage en løsning som kun bruker WebSocket-transport, og SignalR tilbyr alle funksjonene du trenger for å skrive din egen kode, som å falle tilbake til andre transportmetoder og modifisere applikasjonen for nyere WebSocket-implementasjoner.
3. Transport og retur
SignalR er en abstraksjon av transportteknologien som kreves for å implementere sanntidsfunksjoner mellom klienter og servere. SignalR starter først tilkoblingen med HTTP og sjekker om WebSocket er tilgjengelig – hvis ja, oppgrader til WebSocket-tilkoblingen. WebSocket er den mest ideelle overføringsmetoden for SignalR fordi den utnytter serverminnet mest effektivt, har lavest latens og omfattende underliggende funksjoner (som full dupleks-kommunikasjon mellom klient og server), men også har de strengeste kravene: serveren må bruke Windows Server 2012 eller Windows 8 operativsystem, og samtidig. .NET framework versjon 4.5 og nyere. Hvis disse kravene ikke oppfylles, vil SignalR forsøke å bruke en alternativ overføringsmetode for å koble til.
4. HTML5-frakt
Transportmetoden som brukes avhenger av om klientnettleseren støtter HTML5, ellers vil den gamle transportmetoden bli brukt. WebSocket (hvis både serveren og nettleseren støtter WebSocket). WebSocket er den eneste måten å etablere en ekte og varig toveis forbindelse både på klient- og serversiden. Selvfølgelig har WebSocket også de strengeste kravene: det støttes kun i de nyeste versjonene av IE, Chrome og FF, og er bare delvis implementert i andre nettlesere som Opera og Safari. Serveren sender hendelser, også kjent som EventSource (hvis nettleseren støtter server-sending, støtter i praksis alle nettlesere unntatt IE denne funksjonen).
5. Kometoverføring
Følgende transporttyper er basert på Comet webapplikasjonsmodellen, hvor nettleseren eller klienten opprettholder en lang HTTP-tilkoblingsforespørsel, og serveren kan sende data til klienten uten en eksplisitt forespørsel fra klienten. Forever Frame (IE kun) Forever Frame vil lage en skjult IFrame som sender en forespørsel til serveren som ikke blir fullført. Serveren sender deretter kontinuerlig skript til klienten og utføres umiddelbart av klienten, det vil si en enveis sanntidsforbindelse fra serveren til klienten. Klient-til-server-tilkoblingen bruker en annen forbindelse enn den forbindelsen. For eksempel oppretter en standard HTML-forespørsel en ny tilkobling for hver data som sendes. Ajax long polling skaper ikke en vedvarende tilkobling, men poller ved kontinuerlig å sende forespørsler til serveren. Vent på at serveren svarer og lukk denne forbindelsen på hver tilkobling, og gjør deretter umiddelbart en ny forespørsel. Selvfølgelig vil dette føre til en viss forsinkelse når tilkoblingen tilbakestilles og kobles til igjen. For informasjon om transportmetodene som støttes av ulike konfigurasjoner, se Støttede plattformer. (IE krever 8 eller høyere, andre nettlesere er gjeldende versjon -1) Prosessen for valg av overføringsmetode Følgende liste viser hvordan SignalR bestemmer hvilken type som skal brukes til overføring. IE8 og tidligere, bruk lang polling. Hvis JSONP er konfigurert (dvs. at jsonp-parameteren settes til true ved tilkobling), bruk long polling. Hvis du bruker en kryssdomeneforbindelse (dvs. at SignalR-endepunktet og siden ikke er i samme domene), bruk WebSockets hvis følgende betingelser er oppfylt: Klienten støtter Cross-Domain Resource Sharing (CORS), se CORS for detaljer Klienten støtter WebSocket Serveren støtter WebSocket Hvis noen av de ovennevnte betingelsene ikke er oppfylt, brukes en lang poll. For mer informasjon om kryssdomeneforbindelser, se Hvordan etablere kryssdomeneforbindelser. Hvis du ikke konfigurerer bruken av JSONP og tilkoblingen ikke er på tvers av domener, bruk selvfølgelig WebSocket, forutsatt at både klient og server støtter WebSocket. Hvis klienten eller serveren ikke støtter WebSockets, bruk serveren til å sende hendelser. Hvis serveren sender en hendelse som ikke er tilgjengelig, bruk en Forever Frame. Hvis Forever Frame ikke er tilgjengelig, bruk long polling. Overvåk overføring Du kan se hvilken transportmetode applikasjonen din bruker ved å aktivere Hub-logging og i nettleserens konsoll. For å aktivere logging, legg til følgende kommando i klientapplikasjonen: nnection.hub.logging = true;
6. Inspeksjon og transport:
Du kan se hvilken transportmetode applikasjonen din bruker ved å aktivere Hub-logging og i nettleserens konsoll. For å aktivere logging, legg til følgende kommando i klientapplikasjonen: nnection.hub.logging = true; $.connection.hub.logging = true; I IE, trykk F12 for å åpne utviklerverktøyene og klikk på fanen Konsoll.
I Chrome, trykk Ctrl+Shift+J for å åpne konsollen
Ved å observere loggingen i konsollen kan du se overføringsmetoden som SignalR bruker.
7. Utpekt skip:
Å forhandle overføringsmetoden krever en viss tid og ressursene til serveren/klienten. Hvis klientmiljøet er kjent, kan transportmetoden spesifiseres når tilkoblingen initieres for å forbedre ytelsen. Følgende kode demonstrerer bruk av Ajax sin lange polling direkte ved tilkoblingsstart hvis klienten er kjent for å støtte en annen protokoll: connection.start({ transport: 'longPolling' }); Hvis du vil at en klient skal forhandle transporten i en bestemt rekkefølge, kan du spesifisere rekkefølgen forhandlingen forsøkes i. Koden nedenfor viser hvordan du kan prøve å bruke WebSockets først og bruke lang polling rett etter feil. connection.start({ transport: ['webSockets','longPolling'] }); Strengkonstantene som er spesifisert av brukeren er definert som følger: webSockets forverFrame serverSentEvents Langpollling
8. Tilkoblinger og huber SignalR API inkluderer to klient-server kommunikasjonsmodeller: vedvarende tilkoblinger og huber.
En tilkobling representerer et enkelt endepunkt for å sende en enkelt, gruppert eller kringkastet melding. PersistentConnection API (representert av PersistentConnection-klassen i .NET-kode) gir utviklere direkte tilgang til SignalRs underliggende kommunikasjonsprotokoll. Utviklere som har brukt tilkoblingsbaserte API-er som WCF vil være mer kjent med tilkoblingskommunikasjonsmodellen. Huber er API-baserte, men høyere nivå kommunikasjonspipelines som lar klienter og servere kalle metoder direkte til hverandre. SignalR gjør en utmerket jobb med å håndtere kryssmaskinplanlegging, og lar klienter enkelt kalle metoder på serveren som om de kalte lokale metoder, og omvendt. Utviklere som har brukt fjernbaserte samtalebaserte AIP-er som .Net Remoting vil være mer kjent med hub-modellen. Ved å bruke huben kan du også sende sterkt typede parametere til metoder og binde dem til modellen.
Arkitekturdiagram: Diagrammet nedenfor viser forholdet mellom knutepunktet, den kontinuerlige forbindelsen og den underliggende teknologien som brukes til transport.
9. Hvordan huben fungerer:
Når serverkoden kaller klienten, vil serveren sende en pakke som inneholder den kallende metoden og parameterne (når objektet brukes som metodeparameter, vil det bli serialisert som JSON for å sendes) til klienten. Klienten sjekker deretter navnet på mottatt metode og utfører et matchoppslag i den klientdefinerte metoden, og hvis matchen lykkes, kjøres metoden og det deserialiserte objektet brukes som metodeparameter. Du kan bruke verktøy som Fiddler for å overvåke utførelsen av metodekall. Følgende bilde viser en metode fanget fra Fiddlers logger for å sendes fra SignalR-serveren til nettleserklienten. Metoden som initieres fra huben kalles MoveShapeHub, og metoden heter updateShape.
I dette eksempelet identifiseres navnet på huben med parameteren «H», metodenavnet med parameteren «M», og parameterobjektet som sendes til metoden identifiseres med parameteren «A». Applikasjonen som genererte meldingen ble implementert i den høyfrekvente sanntidskommunikasjonsveiledningen. Velg en kommunikasjonsmodell: De fleste applikasjoner bruker hubens API, som kan brukes i følgende situasjoner: Du må spesifisere formatet meldingen sendes i. Utviklere foretrekker å bruke en meldings- og planleggingsmodell fremfor en fjernsamtalemodell Meldingsmodellen brukes i eksisterende applikasjoner og er planlagt portert til SignalR.
|