Come funziona SignalR internamente?


160

Qualcuno può farmi sapere come SignalR funziona internamente in modo ad alto livello?

Immagino stia scaricando i dati usando Response.Flushe sul lato client sta inviando richieste Ajax a determinati intervalli. È corretto?


13
@dfowler ha recentemente rilasciato un'intervista a Scott Hansleman che è stata molto istruttiva hanselminutes.com/291/… .
Allineato il

1
Buon articolo sull'architettura del segnale r e su come funziona lostechies.com/erichexter/2012/11/05/… asp.net/signalr/overview/getting-started/…
Mahesh,

So che è molto tempo fa ma microsoftvirtualacademy.com/Content/…
lordkain

1
Guarda anche questa presentazione al NDC 2013 di David Fowler e Damian Edwards intitolata "Under the cover with ASP.NET SignalR" dove costruiscono una versione lite di SignalR dal vivo sul palco. È molto istruttivo. È pre 2.0 ma questo non dovrebbe importare molto. vimeo.com/68383353
Johan B,

Risposte:


241

No, SignalR è un'astrazione su una connessione. Offre due modelli di programmazione su quella connessione (hub e connessioni permanenti). SignalR ha un concetto di trasporto, ogni trasporto decide come i dati vengono inviati / ricevuti e come si connette e si disconnette.

SignalR ha alcuni trasporti integrati:

  1. WebSockets
  2. Eventi inviati dal server
  3. Forever Frame
  4. Polling lungo

SignalR tenta di scegliere la connessione "migliore" supportata da server e client (è anche possibile forzarla a utilizzare un trasporto specifico).

Questo è di alto livello. Se vuoi vedere come viene implementato ogni trasporto, puoi guardare il codice sorgente .

C'è anche un codice client per ogni trasporto: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

Se ti stai chiedendo come funziona il trasporto polling lungo in particolare:

Invia una richiesta Ajax al server che attende in modo asincrono la risposta di un segnale. Quando c'è un segnale o la richiesta scade, ritorna dal server e invia un'altra richiesta e il processo continua. (Ho lasciato alcuni dettagli su come il client tiene traccia di ciò che ha visto in modo da non perdere i messaggi)

Spero che risponda alla maggior parte della tua domanda.


3
puoi dirmi quante connessioni è in grado di supportare contemporaneamente?
Farhad-Taran,

1
Per quanto riguarda il numero di connessioni supportate da Signalr dipende dal limite di richieste di IIS. Può essere aumentato usando voci di configurazione o script di shell. Di solito Signalr memorizza nella cache 1000 connessioni in memoria.
Thanigainathan,

1
Come già accennato, il rally limite è a livello di server. Damnien Edwards (co-creatore di SignalR) ha ottenuto 150.000 connessioni da un singolo server da 10 GB: twitter.com/DamianEdwards/status/486642486350061568
LDJ

qualsiasi risposta a questa domanda stackoverflow.com/q/40906789/3565879
Technacron

@davidfowl si prega di dare risposta per questo stackoverflow.com/questions/47504489/...
Hitesh Thakor

5

@davidfowl ha già risposto alla maggior parte. Tuttavia, per fornire ulteriori dettagli sulla differenza nel comportamento dei trasporti, in particolare tra WebSocket e altri trasporti; di seguito sono riportati alcuni punti.

  • WebSocket è l'unico trasporto che stabilisce una vera connessione persistente a due vie tra client e server. Tuttavia, WebSocket è supportato solo da IIS 8 o versioni successive e dalle ultime versioni di Internet Explorer, Google Chrome e Mozilla Firefox.
  • Mentre Server Sent Events, Forever Frame e Long polling, tutti e tre seguono una comunicazione unidirezionale e sono supportati dalla maggior parte dei browser.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.